package interfaceUsuario;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;

import sistema.AudioPlayer;
import sistema.Tabela;
import sistema.Utilitarios;
import sistema.Verificador;


import dados.Anotacao;
import dados.Contato;
import dados.Evento;
import dados.FormaDeContato;
import dados.Perfil;
import dados.Usuario;
import dados.FormaDeContato.TipoDeFormaDeContato;


public class Principal implements MouseListener{
	private final String STRING_VAZIA = "";
	private Usuario usuario;

	/*
	 * Construtor
	 */
	private Principal(){
		usuario = null;
	}

	/*
	 * Main
	 */
	public static void main(String[] args) {
		Principal janela = new Principal();
		janela.iniciar();
	}

	/*
	 * Inicia a GUI chamando a tela de login
	 */
	private void iniciar(){
		constroiJanelaLogin();
	}

	//Atributos para janela recuperar senha-------------------------------------------------------------------//Recuperar senha
	private JFrame frameRecuperaSenha;
	private JTextField tfRecuperaSenhaEmail;
	private JLabel btRecuperarSenha;

	private void fechaFrameRecuperaSenha(){
		frameRecuperaSenha.setVisible(false);
		frameRecuperaSenha = null;
	}

	private void constroiJanelaRecuperaSenha(){
		frameRecuperaSenha = new JFrame("Diario MultiTudo - Recuperar Senha");
		frameRecuperaSenha.setVisible(true);
		frameRecuperaSenha.setSize(400,250);
		frameRecuperaSenha.setResizable(false);
		frameRecuperaSenha.setLocationRelativeTo(frameLogin);
		frameRecuperaSenha.setLayout(new BorderLayout());
		JPanel wrapper = new JPanel(),left = new JPanel(), right = new JPanel(),top = new JPanel(), bottom = new JPanel();
		frameRecuperaSenha.add(wrapper, BorderLayout.CENTER);
		frameRecuperaSenha.add(top, BorderLayout.NORTH);
		frameRecuperaSenha.add(bottom, BorderLayout.SOUTH);
		wrapper.setLayout(new BoxLayout(wrapper, BoxLayout.LINE_AXIS));
		wrapper.setBorder(BorderFactory.createEmptyBorder(60,0,0,0));
		wrapper.setBackground(Color.white);
		wrapper.add(left);
		wrapper.add(right);
		top.setBackground(Color.DARK_GRAY);
		JLabel lb = new JLabel("<html><font size=3 face='verdana' color='#ffffff'>Recuperar Senha:</html>");
		top.add(lb);
		top.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		tfRecuperaSenhaEmail = new JTextField(20);
		tfRecuperaSenhaEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		JLabel email = new JLabel("Email de Login:");
		left.add(email); left.setOpaque(false);
		right.setBorder(BorderFactory.createEmptyBorder(0,0,0,10));
		right.setLayout(new GridLayout(3,1));
		right.add(tfRecuperaSenhaEmail); right.setOpaque(false);
		bottom.setBackground(Color.DARK_GRAY);
		bottom.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, Color.decode("200200200")));
		btRecuperarSenha = new JLabel("<html><font color='#ffffff'>Recuperar Senha</font></html>");
		btRecuperarSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		bottom.add(btRecuperarSenha);
		btRecuperarSenha.addMouseListener(this);

	}

	//Atributos para janela de login------------------------------------------------------------------------------// LOGIN
	private JFrame frameLogin;
	private JTextField tfLoginEmail;
	private JPasswordField tfLoginSenha;
	private JLabel btLoginEntrar, btLoginCadastrar, btLoginCancelar, btLoginEsqueciSenha;

	/*
	 * Fecha a janela de login
	 */
	private void fechaFrameLogin(){
		frameLogin.setVisible(false);
		frameLogin = null;
	}

	/*
	 * Constroi janela de login
	 */
	private void constroiJanelaLogin(){
		frameLogin = new JFrame("Diario MultiTudo - Login");
		frameLogin.setVisible(true);
		frameLogin.setSize(399,249);
		frameLogin.setMinimumSize(new Dimension(399,249));
		frameLogin.setMaximumSize(new Dimension(401,251));
		frameLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frameLogin.setResizable(true);
		frameLogin.setLocation(new Point(Toolkit.getDefaultToolkit().getScreenSize().width/3,Toolkit.getDefaultToolkit().getScreenSize().height/3));
		frameLogin.setLayout(new BorderLayout());
		JPanel wrapper = new JPanel(),left = new JPanel(), right = new JPanel(),top = new JPanel(), bottom = new JPanel();
		frameLogin.add(wrapper, BorderLayout.CENTER);
		frameLogin.add(top, BorderLayout.NORTH);
		frameLogin.add(bottom, BorderLayout.SOUTH);
		left.setBackground(Color.white);
		right.setBackground(Color.white);
		wrapper.setBackground(Color.white);
		wrapper.setLayout(new BoxLayout(wrapper, BoxLayout.LINE_AXIS));
		wrapper.add(left);
		wrapper.add(right);
		top.setBackground(Color.DARK_GRAY);
		JLabel lbLogin = new JLabel("<html><font size=3 face='verdana' color='#ffffff'>Login:</html>");
		top.add(lbLogin);
		top.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		tfLoginEmail = new JTextField(20);
		tfLoginEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		tfLoginSenha = new JPasswordField(20);
		tfLoginSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		right.setLayout(new GridLayout(3,1));
		right.setBorder(BorderFactory.createMatteBorder(30, 0, 20, 20, Color.white));
		right.add(tfLoginEmail);
		right.add(tfLoginSenha);		
		left.setLayout(new GridLayout(3, 1));
		left.setBorder(BorderFactory.createMatteBorder(30, 55, 20, 0, Color.white));
		left.add(new JLabel("Email:"));
		left.add(new JLabel("Senha:"));
		bottom.setBackground(Color.DARK_GRAY);
		bottom.setBorder(BorderFactory.createMatteBorder(2, 0, 0, 0, Color.decode("200200200")));
		String criaConta = new String("<html><font color='#ffffff'>  Criar Conta  </font></html>");
		btLoginCadastrar = new JLabel(criaConta);
		btLoginCadastrar.setBorder(BorderFactory.createMatteBorder(0,0,3,0, Color.orange));
		bottom.add(btLoginCadastrar);
		String entrar = new String("<html><font color='#ffffff'>  Entrar   </font></html>");
		btLoginEntrar = new JLabel(entrar);
		btLoginEntrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		bottom.add(btLoginEntrar);
		String esqueciSenha = new String("<html>Esqueci minha Senha  </html>");
		btLoginEsqueciSenha = new JLabel(esqueciSenha);
		btLoginEsqueciSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		JPanel pnBotao = new JPanel(); pnBotao.setOpaque(false);
		pnBotao.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
		pnBotao.add(btLoginEsqueciSenha);
		right.add(pnBotao);
		String cancelar = new String("<html><font color='#ffffff'>  Cancelar  </font></html>");
		btLoginCancelar = new JLabel(cancelar);
		btLoginCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		bottom.add(btLoginCancelar);


		//Seta Listeners aos botoes
		btLoginCadastrar.addMouseListener(this);
		btLoginEntrar.addMouseListener(this);
		btLoginCancelar.addMouseListener(this);
		btLoginEsqueciSenha.addMouseListener(this);
	}

	//Atributos para janela de Busca genérica-------------------------------------------------------------------------// BUSCA FormaDeContato
	private JFrame frameBuscaFormaDeContato;
	@SuppressWarnings("rawtypes")
	private JComboBox cbFormaDeContatoEncontrados;
	private JLabel btBuscaFormaDeContatoRemover;
	@SuppressWarnings("unused")
	private boolean nenhumaFormaDeContatoEncontrada;

	private void fechaFrameBuscaFormaDeContato(){
		frameBuscaFormaDeContato.setVisible(false);
		frameBuscaFormaDeContato = null;
	}

	private FormaDeContato[] procuraFormaDeContatos(Contato contato){
		List<FormaDeContato> list = contato.getFormasDeContato();
		FormaDeContato[] temp = new FormaDeContato[list.size()];
		for(int i = 0; i < list.size(); i++){
			temp[i] = list.get(i);
		}
		return temp;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void constroiJanelaBuscaFormaDeContato(FormaDeContato[] listFormaDeContato){
		frameBuscaFormaDeContato = new JFrame("Diario MultiTudo - Remove Forma De Contato");
		frameBuscaFormaDeContato.setSize(400,200);
		frameBuscaFormaDeContato.setVisible(true);
		frameBuscaFormaDeContato.setResizable(false);
		frameBuscaFormaDeContato.setLocationRelativeTo(framePrincipal);

		JPanel wrapper = new JPanel(), top = new JPanel(), middle = new JPanel(), middleLeft = new JPanel(), middleRight = new JPanel(), bottom = new JPanel();
		wrapper.setBackground(Color.white);
		wrapper.setLayout(new BoxLayout(wrapper, BoxLayout.Y_AXIS));
		wrapper.add(top);
		wrapper.add(middle);
		wrapper.add(bottom);

		top.setBackground(Color.DARK_GRAY);
		top.setBorder(BorderFactory.createMatteBorder(0, 0, 4, 0, Color.orange));
		top.add(new JLabel("<html><font color='#ffffff'>Remove Forma De Contato:</font></html>"));
		middle.setOpaque(false);
		middle.setLayout(new BoxLayout(middle, BoxLayout.LINE_AXIS));
		middle.setBorder(BorderFactory.createMatteBorder(30, 10, 30, 10, Color.white));
		middleLeft.setLayout(new FlowLayout(FlowLayout.RIGHT));
		middleLeft.setOpaque(false);
		middleRight.setLayout(new FlowLayout(FlowLayout.LEFT));
		middleRight.setOpaque(false);
		bottom.setBackground(Color.DARK_GRAY);
		bottom.setBorder(BorderFactory.createMatteBorder(4, 0, 0, 0, Color.orange));

		btBuscaFormaDeContatoRemover = new JLabel("<html><font color='#ffffff'> Remover </html");
		btBuscaFormaDeContatoRemover.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btBuscaFormaDeContatoRemover.addMouseListener(this);
		bottom.add(btBuscaFormaDeContatoRemover);	

		if(listFormaDeContato.length==0){
			cbFormaDeContatoEncontrados = new JComboBox(listFormaDeContato);
			cbFormaDeContatoEncontrados.setEditable(false);
			nenhumaFormaDeContatoEncontrada = true;
			middleRight.add(new JLabel("<html><font color='#CD5C5C'> Nenhuma Forma De Contato localizada!</font></html>"));
		}else{
			nenhumEventoLocalizado = false;
			cbFormaDeContatoEncontrados = new JComboBox(listFormaDeContato);
			middleRight.add(cbFormaDeContatoEncontrados);
		}
		middleLeft.add(new JLabel("Forma De Contato Encontrados:"));

		middle.add(middleLeft);
		middle.add(middleRight);

		frameBuscaFormaDeContato.add(wrapper);

	}

	//Atributos para janela de Busca de contato--------------------------------------------------------------------// BUSCA CONTATO
	private JFrame frameBuscaContato;
	@SuppressWarnings("rawtypes")
	private JComboBox cbContatosAchados;
	private JLabel btBuscaContatoRemove, btBuscaContatoEditar, btBuscaContatoSelecionar,btBuscaContatoVisualizar;
	private boolean nenhumContatoLocalizado = false, ehBuscaEventoPorContato = false;
	private Contato contatoRetorno;

	/*
	 * Procura por um contato
	 */
	private Contato[] procuraContato(String nome){
		List<Contato> temp = this.usuario.procuraContato(nome);
		Contato[] listContatos = new Contato[temp.size()];
		for(int i = 0; i < temp.size(); i++){
			listContatos[i] = temp.get(i);
		}
		return listContatos;
	}
	/*
	 * Fecha a janela de busca de contato
	 */
	private void fechaFrameBuscaContato(){
		frameBuscaContato.setVisible(false);
		frameBuscaContato = null;
	}
	/*
	 * Constroi a janela de busca de contato
	 */	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void constroiJanelaBuscaContato(boolean ehSelecao,Contato[] listContatos){
		frameBuscaContato = new JFrame("Diario MultiTudo - Busca");
		frameBuscaContato.setSize(400,200);
		frameBuscaContato.setVisible(true);
		frameBuscaContato.setResizable(false);
		frameBuscaContato.setLocationRelativeTo(framePrincipal);

		JPanel wrapper = new JPanel(), top = new JPanel(), middle = new JPanel(), middleLeft = new JPanel(), middleRight = new JPanel(), bottom = new JPanel();
		wrapper.setBackground(Color.white);
		wrapper.setLayout(new BoxLayout(wrapper, BoxLayout.Y_AXIS));
		wrapper.add(top);
		wrapper.add(middle);
		wrapper.add(bottom);

		top.setBackground(Color.DARK_GRAY);
		top.setBorder(BorderFactory.createMatteBorder(0, 0, 4, 0, Color.orange));
		top.add(new JLabel("<html><font color='#ffffff'>Busca por Contato:</font></html>"));
		middle.setOpaque(false);
		middle.setLayout(new BoxLayout(middle, BoxLayout.LINE_AXIS));
		middle.setBorder(BorderFactory.createMatteBorder(30, 10, 30, 10, Color.white));
		middleLeft.setLayout(new FlowLayout(FlowLayout.RIGHT));
		middleLeft.setOpaque(false);
		middleRight.setLayout(new FlowLayout(FlowLayout.LEFT));
		middleRight.setOpaque(false);
		bottom.setBackground(Color.DARK_GRAY);
		bottom.setBorder(BorderFactory.createMatteBorder(4, 0, 0, 0, Color.orange));

		btBuscaContatoEditar =new JLabel("<html><font color='#ffffff'> Editar Contato </html");
		btBuscaContatoEditar.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btBuscaContatoRemove = new JLabel("<html><font color='#ffffff'> Remover Contato </html");
		btBuscaContatoRemove.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btBuscaContatoSelecionar = new JLabel("<html><font color='#ffffff'> Selecionar Contato </html");
		btBuscaContatoSelecionar.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btBuscaContatoVisualizar = new JLabel("<html><font color='#ffffff'> Visualizar Contato </html");
		btBuscaContatoVisualizar.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));

		bottom.add(btBuscaContatoRemove); bottom.add(btBuscaContatoEditar); 

		if(!ehSelecao){
			bottom.add(btBuscaContatoVisualizar);
			btBuscaContatoSelecionar.setEnabled(false);
			btBuscaContatoSelecionar.setText("<html><font color='#c0c0c0'> Selecionar Contato </html");
			if(listContatos.length==0){
				btBuscaContatoEditar.setEnabled(false);
				btBuscaContatoRemove.setEnabled(false);
				btBuscaContatoVisualizar.setEnabled(false);
				cbContatosAchados = new JComboBox(listContatos);
				cbContatosAchados.setEditable(false);
				nenhumContatoLocalizado = true;
				middleRight.add(new JLabel("<html><font color='#CD5C5C'> Nenhum contato localizado!</font></html>"));
			}else{
				nenhumContatoLocalizado = false;
				cbContatosAchados = new JComboBox(listContatos);
				cbContatosAchados.setPreferredSize(new Dimension(220,30));
				JScrollPane scContatosAchados = new JScrollPane(cbContatosAchados);
				scContatosAchados.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
				middleRight.add(scContatosAchados);
				btBuscaContatoEditar.addMouseListener(this);
				btBuscaContatoRemove.addMouseListener(this);
				btBuscaContatoVisualizar.addMouseListener(this);
			}
			middleLeft.add(new JLabel("Contatos Encontrados:"));

			middle.add(middleLeft);
			middle.add(middleRight);

			frameBuscaContato.add(wrapper);		

		}else{
			bottom.add(btBuscaContatoSelecionar);
			btBuscaContatoEditar.setEnabled(false);
			btBuscaContatoRemove.setEnabled(false);
			btBuscaContatoSelecionar.setEnabled(true);
			if(listContatos.length==0){
				cbContatosAchados = new JComboBox(listContatos);
				cbContatosAchados.setEditable(false);
				nenhumContatoLocalizado = true;
				middleRight.add(new JLabel("<html><font color='#CD5C5C'> Nenhum contato localizado!</font></html>"));
			}else{
				nenhumContatoLocalizado = false;
				cbContatosAchados = new JComboBox(listContatos);
				cbContatosAchados.setPreferredSize(new Dimension(220,30));
				JScrollPane scContatosAchados = new JScrollPane(cbContatosAchados);
				scContatosAchados.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
				middleRight.add(scContatosAchados);
			}
			middleLeft.add(new JLabel("Contatos Encontrados:"));

			middle.add(middleLeft);
			middle.add(middleRight);

			frameBuscaContato.add(wrapper);

			btBuscaContatoSelecionar.addMouseListener(this);
		}
	}

	//Atributos para janela de Busca de evento--------------------------------------------------------------------// BUSCA EVENTO
	private JFrame frameBuscaEvento;
	@SuppressWarnings("rawtypes")
	private JComboBox cbEventosAchados;
	private JLabel btBuscaEventoRemove, btBuscaEventoEditar,btBuscaEventoVisualizar;
	private boolean nenhumEventoLocalizado = false;

	/*
	 * Procura por um evento
	 */
	private Evento[] procuraEvento(Object obj){
		List<Evento> temp = null;
		Evento[] listEventos = new Evento[0];
		if(obj instanceof String){
			temp = this.usuario.procuraEvento((String)obj);
			listEventos = new Evento[temp.size()];
			for(int i = 0; i < temp.size(); i++){
				listEventos[i] = temp.get(i);
			}
		}else if(obj instanceof Contato){
			temp = this.usuario.procuraEventoPorContato((Contato)obj);
			listEventos = new Evento[temp.size()];
			for(int i = 0; i < temp.size(); i++){
				listEventos[i] = temp.get(i);
			}
		}
		return listEventos;
	}
	/*
	 * Fecha a janela de busca de evento
	 */
	private void fechaFrameBuscaEvento(){
		frameBuscaEvento.setVisible(false);
		frameBuscaEvento = null;
	}
	/*
	 * Constroi a janela de busca de evento
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void constroiJanelaBuscaEvento(Evento[] listEvento){
		frameBuscaEvento = new JFrame("Diario MultiTudo - Busca");
		frameBuscaEvento.setSize(400,200);
		frameBuscaEvento.setVisible(true);
		frameBuscaEvento.setResizable(false);
		frameBuscaEvento.setLocationRelativeTo(framePrincipal);

		JPanel wrapper = new JPanel(), top = new JPanel(), middle = new JPanel(), middleLeft = new JPanel(), middleRight = new JPanel(), bottom = new JPanel();
		wrapper.setBackground(Color.white);
		wrapper.setLayout(new BoxLayout(wrapper, BoxLayout.Y_AXIS));
		wrapper.add(top);
		wrapper.add(middle);
		wrapper.add(bottom);

		top.setBackground(Color.DARK_GRAY);
		top.setBorder(BorderFactory.createMatteBorder(0, 0, 4, 0, Color.orange));
		top.add(new JLabel("<html><font color='#ffffff'>Busca por Evento:</font></html>"));
		middle.setOpaque(false);
		middle.setLayout(new BoxLayout(middle, BoxLayout.LINE_AXIS));
		middle.setBorder(BorderFactory.createMatteBorder(30, 10, 30, 10, Color.white));
		middleLeft.setLayout(new FlowLayout(FlowLayout.RIGHT));
		middleLeft.setOpaque(false);
		middleRight.setLayout(new FlowLayout(FlowLayout.LEFT));
		middleRight.setOpaque(false);
		bottom.setBackground(Color.DARK_GRAY);
		bottom.setBorder(BorderFactory.createMatteBorder(4, 0, 0, 0, Color.orange));

		btBuscaEventoEditar =new JLabel("<html><font color='#ffffff'> Editar Evento </html");
		btBuscaEventoEditar.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btBuscaEventoRemove = new JLabel("<html><font color='#ffffff'> Remover Evento </html");
		btBuscaEventoRemove.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btBuscaEventoVisualizar = new JLabel("<html><font color='#ffffff'> Visualizar Evento </html");
		btBuscaEventoVisualizar.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));

		bottom.add(btBuscaEventoRemove); bottom.add(btBuscaEventoEditar); bottom.add(btBuscaEventoVisualizar);

		if(listEvento.length==0){
			cbEventosAchados = new JComboBox(listEvento);
			cbEventosAchados.setEditable(false);
			nenhumEventoLocalizado = true;
			middleRight.add(new JLabel("<html><font color='#CD5C5C'> Nenhum evento localizado!</font></html>"));
		}else{
			nenhumEventoLocalizado = false;
			cbEventosAchados = new JComboBox(listEvento);
			cbEventosAchados.setPreferredSize(new Dimension(220,30));
			JScrollPane scEventosAchados = new JScrollPane(cbEventosAchados);
			scEventosAchados.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
			middleRight.add(scEventosAchados);

			btBuscaEventoEditar.addMouseListener(this);
			btBuscaEventoRemove.addMouseListener(this);
			btBuscaEventoVisualizar.addMouseListener(this);
		}
		middleLeft.add(new JLabel("Eventos Encontrados:"));

		middle.add(middleLeft);
		middle.add(middleRight);

		frameBuscaEvento.add(wrapper);

	}

	//Atributos para janela Principal--------------------------------------------------------------------------------// JANELA PRINCIPAL
	private JFrame framePrincipal;
	private JLabel btPrincipalLogout, btPrincipalAddEvento, btPrincipalAddContato,btPrincipalEditarPefil, btPrincipalBuscaContato,btPrincipalBuscaEventoPorNome,btPrincipalBuscaEventoPorContato;
	private JLabel btPrincipalRefresh;
	private JTable tbEventosFuturos, tbEventosPassados, tbContatos;
	private JTextField tfPrincipalBuscaContato, tfPrincipalBuscaEventoPorNome, tfPrincipalBuscaEventoPorContato;
	private ArrayList<Object> dadosEventosFuturos, dadosEventosPassados, dadosContatos;

	/*
	 * Fecha a janela Principal
	 */
	private void fechaFramePrincipal(){
		framePrincipal.setVisible(false);
		framePrincipal = null;
	}

	/*
	 * Inseri nas tabelas eventos futuros, passados e contatos;
	 */
	private void inseriEventosEContatos(){
		for(Contato c: this.usuario.getContatos()){
			addTabelaContato(new String[]{c.getNome(),c.getEmail()});
		}
		for(Evento e: this.usuario.getEventosFuturos()){
			addTabelaEventosFuturos(new String[]{e.getData(),e.getHorario(), e.getNome(), e.getAnotacoes().size()+""});
		}
		for(Evento e: this.usuario.getEventosPassados()){
			addTabelaEventosPassados(new String[]{e.getData(),e.getHorario(), e.getNome(), e.getAnotacoes().size()+""});
		}
	}

	/*
	 * Atualiza tela, fechando a janela e a abrindo novamente
	 */
	private void atualizaTela(){
		fechaFramePrincipal();
		constroiJanelaPrincipal(this.usuario);
	}

	/*
	 * Constroi janela principal
	 */
	private void constroiJanelaPrincipal(Usuario use){
		//Constroi os arrays de contatos e eventos
		dadosEventosFuturos = new ArrayList<Object>(); dadosEventosPassados = new ArrayList<Object>(); dadosContatos = new ArrayList<Object>();
		inseriEventosEContatos();
		//Cria e seta configuracoes da Janela Principal
		framePrincipal = new JFrame("Diario MultiTudo - "+use.getPerfil().getNome());
		framePrincipal.setVisible(true);
		framePrincipal.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		framePrincipal.setSize(800,600);
		framePrincipal.setMinimumSize(new Dimension(800,600));
		framePrincipal.setResizable(false);
		framePrincipal.setLocationRelativeTo(frameLogin);
		//Instancia Paineis
		JPanel pWrapper, pCenter, pTop, pLeft, pRight, pBottom;
		//Painel Wrapper(Conteudo)
		pWrapper = new JPanel();
		pWrapper.setBackground(Color.white);
		pWrapper.setLayout(new BorderLayout());
		//Painel Central
		pCenter = new JPanel();
		pCenter.setOpaque(false);
		pCenter.setLayout(new BoxLayout(pCenter, BoxLayout.LINE_AXIS));
		//Painel Superior
		pTop = new JPanel();
		pTop.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.orange));
		JPanel pTopLeft = new JPanel(), pTopRight = new JPanel();
		pTopLeft.setOpaque(false); pTopRight.setOpaque(false);
		pTopRight.setLayout(new FlowLayout(FlowLayout.RIGHT));
		pTopLeft.setLayout(new FlowLayout(FlowLayout.LEFT));
		pTop.setBackground(Color.DARK_GRAY);
		pTop.setLayout(new BoxLayout(pTop, BoxLayout.LINE_AXIS));
		btPrincipalLogout = new JLabel("<html><font color='#FFFFFF'>Logout");
		btPrincipalLogout.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		pTopRight.add(new JLabel(String.format("<html><font color='#FFFFFF'>Logado como </font><font size=4 color='#C6E2FF'><i>%10s  </i></font><font color='#ffffff'>|</html>",use.getPerfil().getNome())));
		pTopRight.add(btPrincipalLogout);
		btPrincipalRefresh = new JLabel("<html><font color='#ffffff'> Atualizar </html>");
		btPrincipalRefresh.setBorder(BorderFactory.createMatteBorder(0,0,0,3,Color.orange));
		btPrincipalEditarPefil = new JLabel("<html><font color='#ffffff'> Editar Pefil </html>");
		btPrincipalEditarPefil.setBorder(BorderFactory.createMatteBorder(0,0,0,3,Color.orange));
		pTopLeft.add(btPrincipalEditarPefil); pTopLeft.add(btPrincipalRefresh);
		pTop.add(pTopLeft); pTop.add(pTopRight);
		//Painel Esquerdo
		JPanel pLeftTop = new JPanel(), pLeftBottom = new JPanel();
		pLeft = new JPanel();
		pLeft.setBackground(Color.DARK_GRAY);
		pLeft.setBorder(BorderFactory.createMatteBorder(0,0,0,5,Color.darkGray));
		pLeft.setLayout(new BoxLayout(pLeft, BoxLayout.Y_AXIS));
		pLeft.setOpaque(false);
		pLeftTop.setOpaque(false); pLeftBottom.setOpaque(false);
		pLeftBottom.setLayout(new GridLayout(10,1));
		pLeftBottom.setBorder(BorderFactory.createMatteBorder(50,10,50,10,Color.white));
		//Painel Direito
		pRight = new JPanel();
		pRight.setOpaque(false);
		pRight.setBorder(BorderFactory.createEmptyBorder(15,0,0,0));
		JPanel pEventosFuturos = new JPanel(), pContatos = new JPanel(); JPanel pEventosPassados = new JPanel();
		JTabbedPane tabs = new JTabbedPane();
		tabs.addTab("Proximos Eventos", pEventosFuturos);
		tabs.addTab("Eventos Passados", pEventosPassados);
		tabs.addTab("Contatos", pContatos);
		tabs.setTabPlacement(JTabbedPane.TOP);
		pRight.add(tabs);
		//Painel Inferior
		pBottom = new JPanel();
		pBottom.setBackground(Color.DARK_GRAY);
		pBottom.setBorder(BorderFactory.createMatteBorder(5, 0, 0, 0, Color.ORANGE));
		//Adiciona Paineis Esquerdo e Direito ao Painel Central
		pCenter.add(pLeft);
		pCenter.add(pRight);
		//Adiciona Paineis Superior,Central e Inferior ao Painel Wrapper
		pWrapper.add(pTop, BorderLayout.NORTH);
		pWrapper.add(pCenter, BorderLayout.CENTER);
		pWrapper.add(pBottom, BorderLayout.SOUTH);
		//Adiciona Painel Wrapper ao framePrincipal
		framePrincipal.add(pWrapper);

		String[] tbEventosFuturosColunNames = {"Data","Horário","Evento","No. Notas"};
		tbEventosFuturos = criaTabela(tbEventosFuturosColunNames, dadosEventosFuturos);
		JScrollPane scPnEventosFuturos = new JScrollPane(tbEventosFuturos);
		tbEventosFuturos.setFillsViewportHeight(true);
		pEventosFuturos.add(scPnEventosFuturos);

		String[] tbEventosPassadosColunNames = {"Data","Horário","Evento","No. Notas"};
		tbEventosPassados = criaTabela(tbEventosPassadosColunNames, dadosEventosPassados);
		JScrollPane scPnEventosPassados = new JScrollPane(tbEventosPassados);
		tbEventosPassados.setFillsViewportHeight(true);
		pEventosPassados.add(scPnEventosPassados);

		String[] tbContatosColunNames = {"Nome","E-mail"};
		tbContatos = criaTabela(tbContatosColunNames, dadosContatos);
		JScrollPane scPnContatos = new JScrollPane(tbContatos);
		tbContatos.setFillsViewportHeight(true);
		pContatos.add(scPnContatos);

		btPrincipalAddContato = new JLabel("<html><font color='#ffffff'> Adiciona Contato </html");
		btPrincipalAddContato.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btPrincipalAddEvento = new JLabel("<html><font color='#ffffff'> Adiciona Evento </html>");
		btPrincipalAddEvento.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));

		pBottom.add(btPrincipalAddEvento);
		pBottom.add(btPrincipalAddContato);

		ImageIcon foto = null;
		try{
			foto = new ImageIcon(Utilitarios.redimensionaImagem(new File("uses/"+this.usuario.getEmail()+"/imagens/fotoPerfil.jpg"), 150, 150));
		}catch(Exception erro){}

		JLabel lbfoto = new JLabel(foto);
		JPanel pFoto = new JPanel();
		lbfoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.decode("200200200")));
		pFoto.add(lbfoto);
		pFoto.setOpaque(false);

		tfPrincipalBuscaContato = new JTextField("Digite o nome do contato"); 
		tfPrincipalBuscaEventoPorNome = new JTextField("Digite o nome do evento");
		tfPrincipalBuscaEventoPorContato = new JTextField("Digite o nome do contato");

		btPrincipalBuscaContato = new JLabel("<html><font color='#00000c'>  Buscar Contato  </html");
		btPrincipalBuscaContato.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btPrincipalBuscaEventoPorNome = new JLabel("<html><font color='#00000c'>  Buscar Evento  </html");
		btPrincipalBuscaEventoPorNome.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));
		btPrincipalBuscaEventoPorContato = new JLabel("<html><font color='#00000c'>  Buscar Evento  </html");
		btPrincipalBuscaEventoPorContato.setBorder(BorderFactory.createMatteBorder(0,0,3,0,Color.orange));

		JPanel pnBuscarContato = new JPanel(new FlowLayout(FlowLayout.CENTER)); pnBuscarContato.setOpaque(false); pnBuscarContato.add(btPrincipalBuscaContato);
		JPanel pnBuscarEventoPorNome = new JPanel(new FlowLayout(FlowLayout.CENTER)); pnBuscarEventoPorNome.setOpaque(false); pnBuscarEventoPorNome.add(btPrincipalBuscaEventoPorNome);
		JPanel pnBuscarEventoPorContato = new JPanel(new FlowLayout(FlowLayout.CENTER)); pnBuscarEventoPorContato.setOpaque(false); pnBuscarEventoPorContato.add(btPrincipalBuscaEventoPorContato);

		pLeftTop.add(pFoto);
		pLeftBottom.add(tfPrincipalBuscaContato);
		pLeftBottom.add(pnBuscarContato);
		pLeftBottom.add(tfPrincipalBuscaEventoPorNome);
		pLeftBottom.add(pnBuscarEventoPorNome);
		pLeftBottom.add(tfPrincipalBuscaEventoPorContato);
		pLeftBottom.add(pnBuscarEventoPorContato);

		pLeft.add(pLeftTop);
		pLeft.add(pLeftBottom);

		btPrincipalLogout.addMouseListener(this);
		btPrincipalAddContato.addMouseListener(this);
		btPrincipalAddEvento.addMouseListener(this);
		btPrincipalEditarPefil.addMouseListener(this);
		btPrincipalRefresh.addMouseListener(this);
		btPrincipalBuscaContato.addMouseListener(this);
		btPrincipalBuscaEventoPorNome.addMouseListener(this);
		btPrincipalBuscaEventoPorContato.addMouseListener(this);
	}

	//Cria um molde de JTable-----------------------------------------------------------------------------------------
	private JTable criaTabela(String[] colunas, ArrayList<Object> inDados){
		ArrayList<Object> dados = inDados;
		String[] nColunas = colunas;
		Tabela tabelaEventos = new Tabela(dados,nColunas);
		JTable jTable = new JTable(tabelaEventos);
		jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

		return jTable;
	}

	//Atributos janela de Edicao do perfil do usuario-----------------------------------------------------------// ATUALIZA PERFIL
	private JLabel lbEditarPerfilFoto,btEditarPerfilAtualizar,btEditarPerfilCancelar;
	private JTextField editarPerfilNome,editarPerfilDataNascimento,editarPerfilTelefone,editarPerfilEmail,editarPerfilEndereco;
	private JPasswordField editarPerfilSenhaNova, editarPerfilSenhaAtual;
	private ImageIcon imgEditarPerfil;
	private String novoEnderecoFotoPerfil;

	private void adicionaFotoEditaPerfil(BufferedImage img){
		imgEditarPerfil.setImage(img);
	}

	/*
	 * Metedo para atualizar o perfil
	 */
	private void atualizaPerfil() throws Exception{
		String nome, dataNascimento, telefone, endereco;
		char[] senha;
		nome = editarPerfilNome.getText();
		if(Verificador.ehVazio(nome)){
			throw new Exception("Digite um nome");
		}
		dataNascimento = editarPerfilDataNascimento.getText();
		if(!Verificador.ehVazio(dataNascimento) && !Verificador.ehDataComAnoValida(dataNascimento)){
			throw new Exception("Digite uma data válida da forma dd/mm/aaaa");
		}
		telefone = editarPerfilTelefone.getText();
		if(!Verificador.ehVazio(telefone) && !Verificador.ehTelefoneValido(telefone)){
			throw new Exception("Digite um telefone valido, da forma (DDD)0000-0000");
		}
		endereco = editarPerfilEndereco.getText();
		senha = editarPerfilSenhaNova.getPassword();
		this.usuario.getPerfil().setDataNascimento(dataNascimento);
		this.usuario.getPerfil().setNome(nome);
		this.usuario.getPerfil().setTelefone(telefone);
		this.usuario.getPerfil().setEndereco(endereco);
		if(senha.length > 0){
			String pass = "";
			for(char c: senha){
				pass += c;
			}
			this.usuario.setSenha(pass);
		}
		Utilitarios.salvaFoto(new File(novoEnderecoFotoPerfil), "uses/"+this.usuario.getEmail()+"/imagens/fotoPerfil.jpg");
	}

	/*
	 * Fecha a janela de edicao do perfil do usuario
	 */
	private void fechaFrameEditarPerfil(){
		frameEditarPerfil.setVisible(false);
		frameEditarPerfil = null;
	}

	/*
	 * Constroi janela de edicao de perfil
	 */
	private void constroiJanelaEditarPerfil(Usuario use){
		novoEnderecoFotoPerfil = "uses/"+this.usuario.getEmail()+"/imagens/fotoPerfil.jpg";
		frameEditarPerfil = new JFrame("Diario MultiTudo");	
		frameEditarPerfil.setVisible(true);
		frameEditarPerfil.setResizable(false);
		frameEditarPerfil.setSize(500, 570);
		frameEditarPerfil.setLocationRelativeTo(framePrincipal);

		JPanel wrapper = new JPanel();
		wrapper.setLayout(new BoxLayout(wrapper,BoxLayout.LINE_AXIS));
		frameEditarPerfil.add(wrapper);

		JPanel p1 = new JPanel(), p2 = new JPanel(),pFoto = new JPanel();
		p2.setBackground(Color.white);
		pFoto.setLayout(new BorderLayout());
		pFoto.setBackground(Color.white);
		p2.setLayout(new FlowLayout(FlowLayout.CENTER));
		p1.setLayout(new GridLayout(17,1));
		p1.setBackground(Color.white);
		p1.setBorder(BorderFactory.createEmptyBorder(0, 10, 5, 10));
		wrapper.add(p2);
		wrapper.add(p1);

		imgEditarPerfil = null;
		try{
			imgEditarPerfil = new ImageIcon(Utilitarios.redimensionaImagem(new File("uses/"+this.usuario.getEmail()+"/imagens/fotoPerfil.jpg"), 150, 150));
		}catch(Exception erro){	}

		lbEditarPerfilFoto = new JLabel(imgEditarPerfil);
		lbEditarPerfilFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.decode("200200200")));

		pFoto.add(lbEditarPerfilFoto, BorderLayout.PAGE_START);
		pFoto.add(new JLabel("<html><font size='2' color='#cccccc'><i>Clique na foto para alterá-la</i></html>"));
		p2.add(pFoto);

		editarPerfilNome = new JTextField("",20);
		editarPerfilNome.setToolTipText("Digite seu nome");
		editarPerfilNome.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		editarPerfilDataNascimento = new JTextField("",12);
		editarPerfilDataNascimento.setToolTipText("dd/mm/aaaa");
		editarPerfilDataNascimento.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		editarPerfilEmail = new JTextField("",20);
		editarPerfilEmail.setToolTipText("fulano@servidor");
		editarPerfilEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		editarPerfilEmail.setEnabled(false);
		editarPerfilSenhaNova = new JPasswordField("",30);
		editarPerfilSenhaNova.setToolTipText("Senha com pelo menos 6 caracteres.");
		editarPerfilSenhaNova.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		editarPerfilSenhaAtual = new JPasswordField("",30);
		editarPerfilSenhaAtual.setToolTipText("Digite sua senha atual.");
		editarPerfilSenhaAtual.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		editarPerfilTelefone = new JTextField("",10);
		editarPerfilTelefone.setToolTipText("(83)5555-0123");
		editarPerfilTelefone.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		editarPerfilEndereco = new JTextField("",30);
		editarPerfilEndereco.setToolTipText("Digite seu endereco");
		editarPerfilEndereco.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));

		JLabel lbEditarPerfilNome, lbEditarPerfilDataNascimento,lbEditarPerfilTelefone, lbEditarPerfilEmail, lbEditarPerfilEndereco, lbEditarPerfilSenha, SenhaAtual; 
		lbEditarPerfilNome = new JLabel("Nome:");lbEditarPerfilNome.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbEditarPerfilDataNascimento = new JLabel("Data de Nascimento:");lbEditarPerfilDataNascimento.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0,Color.decode("200200200")));
		lbEditarPerfilEmail = new JLabel("Email:");lbEditarPerfilEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbEditarPerfilTelefone = new JLabel("Telefone:");lbEditarPerfilTelefone.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbEditarPerfilEndereco = new JLabel("Endereco:");lbEditarPerfilEndereco.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbEditarPerfilSenha = new JLabel("Nova Senha:");lbEditarPerfilSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		SenhaAtual = new JLabel("Senha Atual:");SenhaAtual.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));

		p1.add(lbEditarPerfilNome);p1.add(editarPerfilNome);
		p1.add(lbEditarPerfilEmail);p1.add(editarPerfilEmail);
		p1.add(lbEditarPerfilSenha);p1.add(editarPerfilSenhaNova);
		p1.add(SenhaAtual);p1.add(editarPerfilSenhaAtual);
		p1.add(lbEditarPerfilDataNascimento);p1.add(editarPerfilDataNascimento);
		p1.add(lbEditarPerfilTelefone);p1.add(editarPerfilTelefone);
		p1.add(lbEditarPerfilEndereco);p1.add(editarPerfilEndereco);

		JPanel pButton = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		pButton.setBackground(Color.white);
		btEditarPerfilAtualizar = new JLabel("<html><font size=3>Atualizar</html>");
		btEditarPerfilAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		btEditarPerfilCancelar = new JLabel("<html><font size=3>Cancelar</html>");
		btEditarPerfilCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		pButton.add(btEditarPerfilAtualizar);
		pButton.add(btEditarPerfilCancelar);
		p1.add(pButton);

		btEditarPerfilAtualizar.addMouseListener(this);
		btEditarPerfilCancelar.addMouseListener(this);		
		lbEditarPerfilFoto.addMouseListener(this);

		setDadosDoUsuario(use); //Preenche os campos com os dados atuais do usuario
	}

	/*
	 * Seta nos campos de texto os dados do usuario corrente.
	 */
	private void setDadosDoUsuario(Usuario use){
		editarPerfilNome.setText(use.getPerfil().getNome());
		editarPerfilDataNascimento.setText(use.getPerfil().getDataNascimento());
		editarPerfilTelefone.setText(use.getPerfil().getTelefone());
		editarPerfilEmail.setText(use.getEmail());
		editarPerfilEndereco.setText(use.getPerfil().getEndereco());
		Utilitarios.repaint(frameEditarPerfil);
	}

	//Atributos janela de Cadastro de Contato------------------------------------------------------------------// CADASTRA CONTATO
	private JFrame frameEditarPerfil;
	private JFrame frameAddContato;
	private JTextField addContatoNome, addContatoEmail, addContatoDataAniversario, addContatoEndereco, addContatoFContato;
	private JTextArea addContatoDescricao;
	private JLabel btAddContatoCadastrar, btAddContatoCancelar, btAddContatoAtualizar, btRemoverFormaDeContato;
	@SuppressWarnings("rawtypes")
	private JComboBox formasDeContato,addContatoTipoFContato;
	private Contato contatoSelecionado;

	/*
	 * Metodo para adicionar um novo contato
	 */
	private void addTabelaContato(String[] linha){
		dadosContatos.add(linha);
	}

	/*
	 * Metedo para atualizar o contato
	 */
	private void atualizaContato(Contato contato) throws Exception{
		String dataNascimento, email, endereco,descricao;
		dataNascimento = addContatoDataAniversario.getText();
		endereco = addContatoEndereco.getText();
		descricao = addContatoDescricao.getText();
		email = addContatoEmail.getText();

		if(!Verificador.ehVazio(dataNascimento) && !Verificador.ehDataComAnoValida(dataNascimento) && !Verificador.ehDataSemAnoValida(dataNascimento)){
			throw new Exception("Digite uma data no formato: dd/mm/aaaa");
		}else if(!Verificador.ehEmailValido(email)){
			throw new Exception("Digite um email valido");
		}
		if(!Verificador.ehVazio(addContatoFContato.getText())){
			contato.addFormaDeContato((TipoDeFormaDeContato)addContatoTipoFContato.getSelectedItem(), addContatoFContato.getText());
		}
		contato.setEmail(email);
		contato.setAniversario(dataNascimento);
		contato.setEndereco(endereco);
		contato.setDescricao(descricao);

	}

	private void removeContatoTabela(String[] linha){
		dadosContatos.remove(linha);
	}

	/*
	 * Fecha janela de cadastro de contato
	 */
	private void fechaFrameAddContato(){
		frameAddContato.setVisible(false);
		frameAddContato = null;
	}

	/*
	 * Controi janela Cadastro de Contato
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void constroiJanelaAddContato(boolean ehAtualizacao,boolean ehVisualizacao, Contato contato){
		frameAddContato = new JFrame();	
		frameAddContato.setVisible(true);
		frameAddContato.setResizable(false);
		frameAddContato.setSize(500, 580);
		frameAddContato.setLocationRelativeTo(framePrincipal);

		JPanel wrapper = new JPanel();
		wrapper.setLayout(new BoxLayout(wrapper,BoxLayout.LINE_AXIS));
		frameAddContato.add(wrapper);

		JPanel p1 = new JPanel(), p2 = new JPanel(),pFoto = new JPanel();
		p2.setBackground(Color.white);
		pFoto.setLayout(new BorderLayout());
		pFoto.setBackground(Color.white);
		p2.setLayout(new FlowLayout(FlowLayout.CENTER));
		p1.setLayout(new GridLayout(19,1));
		p1.setBackground(Color.white);
		p1.setBorder(BorderFactory.createEmptyBorder(0, 10, 5, 10));
		wrapper.add(p2);
		wrapper.add(p1);

		ImageIcon img = new ImageIcon("imagens/foto.jpg");

		lbFoto = new JLabel(img);
		lbFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.decode("200200200")));

		pFoto.add(lbFoto, BorderLayout.PAGE_START);
		pFoto.add(new JLabel("<html><font size='2' color='#cccccc'><i>Clique na foto para alterá-la</i></html>"));
		p2.add(pFoto);

		addContatoNome = new JTextField("",20);
		addContatoNome.setToolTipText("Nome do Contato");
		addContatoNome.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addContatoDataAniversario= new JTextField("",12);
		addContatoDataAniversario.setToolTipText("dd/mm");
		addContatoDataAniversario.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addContatoEmail = new JTextField("",20);
		addContatoEmail.setToolTipText("fulano@servidor");
		addContatoEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addContatoEndereco = new JTextField("",30);
		addContatoEndereco.setToolTipText("Digite seu endereco");
		addContatoEndereco.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addContatoDescricao = new JTextArea();
		addContatoDescricao.setToolTipText("Descricao do contato");
		addContatoDescricao.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addContatoTipoFContato = new JComboBox(TipoDeFormaDeContato.values());
		addContatoTipoFContato.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addContatoFContato = new JTextField("",30);
		addContatoFContato.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));

		JLabel lbNome, lbDataAniversario, lbEmail, lbEndereco,lbDescricao,lbTipoFContato, lbFContato; 
		lbNome = new JLabel("<html><font Color='#FF4500'>*</font> Nome:</html>");lbNome.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbDataAniversario = new JLabel("Data de Aniversario:");lbDataAniversario.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0,Color.decode("200200200")));
		lbEmail = new JLabel("<html><font Color='#FF4500'>*</font> Email:</html>");lbEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbEndereco = new JLabel("Endereco:");lbEndereco.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbDescricao = new JLabel("Descricao:");
		addContatoDescricao.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		lbTipoFContato = new JLabel("Tipo de Forma de Contato:");lbTipoFContato.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbFContato = new JLabel("Forma de Contato:");lbFContato.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));

		JScrollPane scPnDescricao = new JScrollPane(addContatoDescricao);
		scPnDescricao.setWheelScrollingEnabled(true);
		addContatoDescricao.setLineWrap(true);

		p1.add(lbNome);p1.add(addContatoNome);
		p1.add(lbEmail);p1.add(addContatoEmail);
		p1.add(lbDataAniversario);p1.add(addContatoDataAniversario);
		p1.add(lbEndereco);p1.add(addContatoEndereco);
		p1.add(lbDescricao);p1.add(scPnDescricao);
		p1.add(lbTipoFContato);p1.add(addContatoTipoFContato);
		p1.add(lbFContato);p1.add(addContatoFContato);

		p1.add(new JLabel("<html><font Color='#FF4500' size='2'><b>* Item Obrigatorio!</html>"));

		JPanel pButton = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		pButton.setBackground(Color.white);
		btAddContatoCadastrar = new JLabel("<html><font size=3>Cadastrar</html>");
		btAddContatoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		btAddContatoCancelar = new JLabel("<html><font size=3>Cancelar</html>");
		btAddContatoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		btAddContatoAtualizar = new JLabel("<html><font size=3>Atualizar</html>");
		btAddContatoAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		btRemoverFormaDeContato = new JLabel("<html><font size=3>Remover Forma de Contato</html>");
		btRemoverFormaDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));

		if(!ehAtualizacao && !ehVisualizacao){
			pButton.add(btAddContatoCadastrar);
			btAddContatoCadastrar.addMouseListener(this);
		}else if(ehAtualizacao && !ehVisualizacao){
			List<FormaDeContato> temp = contato.getFormasDeContato();
			FormaDeContato[] listFormasContato = new FormaDeContato[temp.size()];
			for(int i=0; i < temp.size(); i++){
				listFormasContato[i] = temp.get(i);
			}
			formasDeContato = new JComboBox(listFormasContato);
			formasDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
			p1.add(new JLabel("Formas de Contato Atuais:"));p1.add(formasDeContato);

			pButton.add(btAddContatoAtualizar);pButton.add(btRemoverFormaDeContato);

			addContatoNome.setText(contato.getNome());
			addContatoNome.setEnabled(false);
			addContatoEmail.setText(contato.getEmail());
			addContatoDataAniversario.setText(contato.getAniversario());
			addContatoDescricao.setText(contato.getDescricao());
			addContatoEndereco.setText(contato.getEndereco());

			btAddContatoAtualizar.addMouseListener(this);
			btRemoverFormaDeContato.addMouseListener(this);
		}else if(!ehAtualizacao && ehVisualizacao){
			List<FormaDeContato> temp = contato.getFormasDeContato();
			FormaDeContato[] listFormasContato = new FormaDeContato[temp.size()];
			for(int i=0; i < temp.size(); i++){
				listFormasContato[i] = temp.get(i);
			}
			formasDeContato = new JComboBox(listFormasContato);
			formasDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
			p1.add(new JLabel("Formas de Contato Atuais:"));p1.add(formasDeContato);

			pButton.add(btAddContatoAtualizar);

			addContatoNome.setText(contato.getNome());
			addContatoEmail.setText(contato.getEmail());
			addContatoDataAniversario.setText(contato.getAniversario());
			addContatoDescricao.setText(contato.getDescricao());
			addContatoEndereco.setText(contato.getEndereco());

			addContatoNome.setEnabled(false);
			addContatoEmail.setEnabled(false);
			addContatoDataAniversario.setEnabled(false);
			addContatoDescricao.setEnabled(false);
			addContatoEndereco.setEnabled(false);
		}
		pButton.add(btAddContatoCancelar);
		p1.add(pButton);

		btAddContatoCancelar.addMouseListener(this);
	}

	/*
	 * Cadastra um contat
	 */
	private void cadastraContato() throws Exception{
		String nome, email,dataNascimento,endereco,descricao;
		nome = addContatoNome.getText();
		email = addContatoEmail.getText();
		dataNascimento = addContatoDataAniversario.getText();
		endereco = addContatoEndereco.getText();
		descricao = addContatoDescricao.getText();
		if(Verificador.ehVazio(nome)){
			throw new Exception("Digite um nome");
		}else if(!Verificador.ehEmailValido(email)){
			throw new Exception("Digite um email valido\nDa forma: nome@hots");
		}

		Contato c1 = null; boolean criou = false;
		try{
			c1 = new Contato(nome, email);
			if(!Verificador.ehVazio(addContatoFContato.getText())){
				c1.addFormaDeContato((TipoDeFormaDeContato)addContatoTipoFContato.getSelectedItem(), addContatoFContato.getText());
			}
			criou = true;
		}catch(Exception erro){
			throw new Exception(erro.getMessage());
		}
		if(!Verificador.ehVazio(descricao)){
			c1.setDescricao(descricao);
		}
		if (!Verificador.ehVazio(endereco)){
			c1.setEndereco(endereco);
		}
		if(!Verificador.ehVazio(dataNascimento)){
			try {
				c1.setAniversario(dataNascimento);
			} catch (Exception erro) {
				criou = false;
				throw new Exception(erro.getMessage());
			}
		}
		if(criou){
			this.usuario.addContato(c1, true);
		}


		dadosContatos.add(new String[]{c1.getNome()});
	}


	//Atributos da janela de cadastro de Evento-----------------------------------------------------------------// CADASTRA EVENTO
	private JFrame frameAddEvento;
	private JTextField addEventoNome, addEventoData, addEventoHorario, addEventoDuracao, addEventoTipo;
	private JTextArea addEventoDescricao;
	@SuppressWarnings("rawtypes")
	private JComboBox addEventoContatoRelacionado;
	private JLabel btAddEventoCadastrar, btAddEventoCancelar, btAddEventoAtualiza,btAddEventoAddContato, btAddEventoAddFoto, btAddEventoAddAudio;
	private JLabel btAudioPlay,  btAudioStop, lbStatus,btAddEventoAudioCadastrar,btAddEventoAudioAtualizar;
	private JLabel btAnotacaoAddNote, btAnotacaoRemoverNote, btAnotacaoVisualizar;
	private boolean ehAddContatoAEvento = false;
	private JPanel pFotos;
	private JTable tbAudioAdicionados, tbAnotacoesAdicionadas;
	private JFileChooser fileChooser;
	private AudioPlayer audio;
	private List<File> listFotos, listAudio;
	private List<Anotacao> listAnotacoes;
	private ArrayList<Object> dadosTabelaAudio, dadosTabelaAnotacao;

	/*
	 * Metodo para adicionar um novo evento futuro
	 */
	private void addTabelaEventosFuturos(String[] linha){
		dadosEventosFuturos.add(linha);
	}

	/*
	 * Metodo para adicionar um nova linha na tabela de audio
	 */
	private void addTabelaAudio(String[] linha){
		dadosTabelaAudio.add(linha);
	}
	/*
	 * Metodo para adicionar um nova linha na tabela de anotacao
	 */
	private void addTabelaAnotacao(String[] linha){
		dadosTabelaAnotacao.add(linha);
	}
	
	private void removeLinhaTabelaAnotacao(int posicao){
		dadosTabelaAnotacao.remove(posicao);
	}
	/*
	 * Remove um evento do usuário corrente.
	 */
	private void removeEvento(Usuario use, Evento evento){
		File dirImg = new File("uses/"+use.getEmail()+"/imagens/"+evento.hashCode());
		File dirAudio =  new File("uses/"+use.getEmail()+"/audio/"+evento.hashCode());
		Utilitarios.deletaDiretorio(dirImg);
		Utilitarios.deletaDiretorio(dirAudio);
		use.removeEvento(evento);
	}

	/*
	 * Metodo para adicionar um novo evento passado
	 */
	private void addTabelaEventosPassados(String[] linha){
		dadosEventosPassados.add(linha);
	}

	/*
	 * Fecha janela de cadastro de evento
	 */
	private void fechaFrameAddEvento(){
		frameAddEvento.setVisible(false);
		frameAddEvento = null;
	}

	private void atualizaEvento(Evento evento) throws Exception{
		String nome,data,horario,duracao,descricao,tipo;
		File dirImgs = new File("uses/"+this.usuario.getEmail()+"/imagens/"+evento.hashCode());
		File dirAudio = new File("uses/"+this.usuario.getEmail()+"/audio/"+evento.hashCode());

		nome = addEventoNome.getText();
		data = addEventoData.getText();
		horario = addEventoHorario.getText();
		duracao = addEventoDuracao.getText();
		descricao = addEventoDescricao.getText();
		tipo = addEventoTipo.getToolTipText();

		if(Verificador.ehVazio(nome)){
			throw new Exception("Digite um nome");
		}else	if(!Verificador.ehDataComAnoValida(data)){
			throw new Exception("<html>Digite uma data valida<br>dd/mm/aaa</html>");
		}else if(!Verificador.ehHorarioValido(horario)){
			throw new Exception("<html>Digite um horario valido<br>hh:mm</html>");
		}else if(!Verificador.ehHorarioValido(duracao)){
			throw new Exception("<html>Digite uma duração<br>hh:mm</html>");
		}else if(Verificador.ehVazio(descricao)){
			throw new Exception("Digite uma descrição para o evento");
		}else if(Verificador.ehVazio(tipo)){
			throw new Exception("Digite um tipo");
		}

		evento.setData(data);
		evento.setDescricao(descricao);
		evento.setDuracao(duracao);
		evento.setHorario(horario);
		evento.setNome(nome);
		evento.setTipo(tipo);

		dirImgs.renameTo(new File("uses/"+this.usuario.getEmail()+"/imagens/"+evento.hashCode())); //Renomeia a pasta para o novo hashcode
		dirAudio.renameTo(new File("uses/"+this.usuario.getEmail()+"/audio/"+evento.hashCode()));

		List<File> temp = new ArrayList<File>();
		for(File f: listFotos){
			try{
				String destino = "uses/"+this.usuario.getEmail()+"/imagens/"+evento.hashCode()+"/"+f.getName();
				Utilitarios.salvaFoto(f, destino);
				temp.add(new File(destino));
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
			}
		}
		evento.setFotos(temp);

		for(File f: listAudio){
			if(!evento.getAudio().contains(f)){
				try{
					String destino = "uses/"+this.usuario.getEmail()+"/audio/"+evento.hashCode()+"/"+f.getName();
					Utilitarios.copia(f, new File(destino));
					evento.adicionaAudio(new File(destino));
				}catch(Exception erro){
					JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
				}
			}
		}	

		evento.setAnotacao(listAnotacoes);

		for(int i = 0; i < addEventoContatoRelacionado.getItemCount(); i++){
			evento.AdicionaContatoAEvento((Contato)addEventoContatoRelacionado.getItemAt(i));
		}
	}

	/*
	 * Pega todos os contatos do usuario corrente e passa para um array de contato
	 */
	private Contato[] todosContatos(Evento evento){
		List<Contato> listContatos = evento.getContatosRelacionados();
		Contato[] contatos = new Contato[listContatos.size()];
		for(int i = 0; i < listContatos.size(); i++){
			contatos[i] = listContatos.get(i);
		}
		return contatos;
	}

	private void adicionaFotosNoPainel(File foto, Evento evento){
		if(evento == null){
			try{
				pFotos.add(new JLabel(new ImageIcon(Utilitarios.redimensionaImagem(foto, 150, 150))));
				listFotos.add(foto);
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
			}
		}else{
			for(File f: evento.getFotos()){
				try{
					pFotos.add(new JLabel(new ImageIcon(Utilitarios.redimensionaImagem(f, 150, 150))));
				}catch(Exception erro){
					JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
				}
			}
		}
	}

	private void preencheTabelaAudio(Evento evento){
		listAudio = evento.getAudio();
		for(File f: listAudio){
			addTabelaAudio(new String[]{f.getName()});
		}
	}
	
	private void preencheTabelaAnotacao(Evento evento){
		listAnotacoes = evento.getAnotacoes();
		for(Anotacao a: listAnotacoes){
			addTabelaAnotacao(new String[]{a.getNote(),a.getData(),a.getHora()});
		}
		
	}

	//Atributos janela inserir nota ----------
	private JFrame frameInserirNota;
	private JLabel btAnotacaoInserirNotaOK, btAnotacaoInserirNotaCancelar;
	private JTextArea taInserirNota;
	
	private void fechaJanelaInserirNota(){
		frameInserirNota.setVisible(false);
		frameInserirNota = null;
	}
	
	private void constroiJanelaInserirNota(boolean ehVisualizacao, Anotacao nota){
		frameInserirNota = new JFrame("Diario MultiTudo - Inserir Anotação");
		frameInserirNota.setVisible(true);
		frameInserirNota.setSize(450,250);
		frameInserirNota.setLocationRelativeTo(frameAddEvento);
		JPanel wrapper = new JPanel(), top = new JPanel(), middle = new JPanel(), bottom = new JPanel();
		wrapper.setBackground(Color.white);
		wrapper.setLayout(new BoxLayout(wrapper, BoxLayout.Y_AXIS));
		top.setBackground(Color.darkGray);
		top.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		top.add(new JLabel("<html><font color='#ffffff'>Digite uma anotação:</font></html>"));
		middle.setOpaque(false);	
		middle.setLayout(new BoxLayout(middle, BoxLayout.Y_AXIS));
		taInserirNota = new JTextArea();
		taInserirNota.setLineWrap(true);
		JScrollPane scInserirNota = new JScrollPane(taInserirNota);
		scInserirNota.setPreferredSize(new Dimension(180, 450));
		scInserirNota.setWheelScrollingEnabled(true);
		scInserirNota.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		middle.add(scInserirNota);
		
		bottom.setLayout(new FlowLayout(FlowLayout.CENTER));
		bottom.setBorder(BorderFactory.createMatteBorder(3, 0, 0, 0, Color.orange));
		wrapper.add(top); wrapper.add(middle); wrapper.add(bottom);
		frameInserirNota.add(wrapper);
		
		if(!ehVisualizacao){
			btAnotacaoInserirNotaOK = new JLabel("<html><font size=3 color='#FFFFFF'> Adicionar </html>");
			btAnotacaoInserirNotaOK.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			bottom.add(btAnotacaoInserirNotaOK);
			btAnotacaoInserirNotaOK.addMouseListener(this);
		}else if(ehVisualizacao){
			taInserirNota.setText(nota.getNote());
			taInserirNota.setEditable(false);
		}
		btAnotacaoInserirNotaCancelar = new JLabel("<html><font size=3 color='#FFFFFF'> Cancelar </html>");
		btAnotacaoInserirNotaCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));		
		bottom.setBackground(Color.darkGray);
		bottom.add(btAnotacaoInserirNotaCancelar);		
		btAnotacaoInserirNotaCancelar.addMouseListener(this);		
	}
	
	/*
	 * Controi janela Cadastro de Evento
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void constroiJanelaAddEvento(boolean ehAtualizacao,boolean ehVisualizacao, Evento evento){
		listFotos = new ArrayList<File>(); listAudio = new ArrayList<File>(); dadosTabelaAudio = new ArrayList<Object>();
		dadosTabelaAnotacao = new ArrayList<Object>();
		listAnotacoes = new ArrayList<Anotacao>();
		lbStatus = new JLabel("Selecione uma anotação para reproduzir");
		ehAddContatoAEvento = false;
		frameAddEvento = new JFrame("Diario MultiTudo");	
		frameAddEvento.setVisible(true);
		frameAddEvento.setResizable(false);
		frameAddEvento.setSize(650, 650);
		frameAddEvento.setLocationRelativeTo(framePrincipal);

		JPanel wrapper = new JPanel(), wrapperAudio = new JPanel(), wrapperAnotacao = new JPanel(), wrapperAll = new JPanel();
		wrapper.setLayout(new BoxLayout(wrapper,BoxLayout.LINE_AXIS));
		wrapperAll.setBackground(Color.DARK_GRAY);
		JTabbedPane tabs = new JTabbedPane();
		tabs.add("Evento", wrapper);
		tabs.add("Anotações", wrapperAnotacao);
		tabs.add("Audio", wrapperAudio);

		tabs.setPreferredSize(new Dimension(650,620));
		wrapperAll.add(tabs);
		frameAddEvento.add(wrapperAll);

		JPanel p1 = new JPanel(); pFotos = new JPanel();
		JScrollPane scP2 = new JScrollPane(pFotos);
		scP2.setPreferredSize(new Dimension(190, 560));
		scP2.setWheelScrollingEnabled(true);
		scP2.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		pFotos.setBackground(Color.DARK_GRAY); pFotos.setLayout(new BoxLayout(pFotos, BoxLayout.Y_AXIS));
		scP2.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 0, Color.DARK_GRAY));

		p1.setLayout(new GridLayout(19,1));
		p1.setBackground(Color.white);
		p1.setBorder(BorderFactory.createEmptyBorder(0, 10, 5, 10));
		wrapper.add(scP2);
		wrapper.add(p1);

		//Tab de anotacao
		wrapperAnotacao.setBackground(Color.white);
		wrapperAnotacao.setLayout(new BoxLayout(wrapperAnotacao, BoxLayout.Y_AXIS));
		JPanel anotacaoTop = new JPanel(), anotacaoBottom = new JPanel(), anotacaoBottomStatus = new JPanel();
		anotacaoBottom.setLayout(new FlowLayout(FlowLayout.CENTER));
		anotacaoBottom.setPreferredSize(new Dimension(650,50));
		anotacaoBottom.setBorder(BorderFactory.createMatteBorder(5, 0, 0, 0, Color.orange));
		anotacaoTop.setOpaque(false); anotacaoBottom.setBackground(Color.DARK_GRAY);
		JLabel imgAnotacao = new JLabel(new ImageIcon("imagens/iconNotes.png"));
		anotacaoTop.setLayout(new BorderLayout());
		anotacaoTop.setBorder(BorderFactory.createEmptyBorder(0,30,0,30));
		anotacaoTop.add(imgAnotacao, BorderLayout.NORTH);
		wrapperAnotacao.add(anotacaoTop); wrapperAnotacao.add(anotacaoBottom);
		
		String[] tbAnotacaoAddColunNames = {"Anotacao","Data","Hora"};
		tbAnotacoesAdicionadas = criaTabela(tbAnotacaoAddColunNames, dadosTabelaAnotacao);
		JScrollPane scTabelaAnotacao = new JScrollPane(tbAnotacoesAdicionadas);
		scTabelaAnotacao.setPreferredSize(new Dimension(400,150));
		tbAnotacoesAdicionadas.setFillsViewportHeight(true);
		anotacaoTop.add(scTabelaAnotacao, BorderLayout.CENTER);
		anotacaoBottomStatus.setOpaque(false); anotacaoBottomStatus.setLayout(new FlowLayout(FlowLayout.CENTER));
		anotacaoBottomStatus.add(new JLabel("Selecione uma anotacao para visualizar."));
		anotacaoTop.add(anotacaoBottomStatus, BorderLayout.SOUTH);

		//
		
		//Tab de audio
		wrapperAudio.setBackground(Color.white);
		wrapperAudio.setLayout(new BoxLayout(wrapperAudio, BoxLayout.Y_AXIS));
		JPanel audioTop = new JPanel(), audioBottom = new JPanel(), audioBottomStatus = new JPanel();
		audioBottom.setLayout(new FlowLayout(FlowLayout.CENTER));
		audioBottom.setPreferredSize(new Dimension(650,50));
		audioBottom.setBorder(BorderFactory.createMatteBorder(5, 0, 0, 0, Color.orange));
		audioTop.setOpaque(false); audioBottom.setBackground(Color.DARK_GRAY);
		JLabel imgMusic = new JLabel(new ImageIcon("imagens/music.png"));
		audioTop.setLayout(new BorderLayout());
		audioTop.setBorder(BorderFactory.createEmptyBorder(0,30,0,30));
		audioTop.add(imgMusic, BorderLayout.NORTH);
		wrapperAudio.add(audioTop); wrapperAudio.add(audioBottom);

		String[] tbAudioAddColunNames = {"Nome do Arquivo"};
		tbAudioAdicionados = criaTabela(tbAudioAddColunNames, dadosTabelaAudio);
		JScrollPane scTabelaAudio = new JScrollPane(tbAudioAdicionados);
		scTabelaAudio.setPreferredSize(new Dimension(400,150));
		tbAudioAdicionados.setFillsViewportHeight(true);
		audioTop.add(scTabelaAudio, BorderLayout.CENTER);
		audioBottomStatus.setOpaque(false); audioBottomStatus.setLayout(new FlowLayout(FlowLayout.CENTER));
		audioBottomStatus.add(lbStatus);
		audioTop.add(audioBottomStatus, BorderLayout.SOUTH);

		//

		addEventoNome = new JTextField(30);
		addEventoNome.setToolTipText("Digite seu nome");
		addEventoNome.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addEventoData = new JTextField(30);
		addEventoData.setToolTipText("dd/mm/aaaa");
		addEventoData.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addEventoHorario = new JTextField(30);
		addEventoHorario.setToolTipText("hh:mm");
		addEventoHorario.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addEventoDuracao = new JTextField(30);
		addEventoDuracao.setToolTipText("hh:mm");
		addEventoDuracao.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		addEventoDescricao = new JTextArea();
		addEventoDescricao.setToolTipText("Descricao do Evento");
		addEventoTipo = new JTextField();
		addEventoTipo.setToolTipText("Tipo do Evento");
		addEventoTipo.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));

		JLabel lbNome, lbData, lbHorario, lbDuracao, lbDescricao, lbTipo, lbContatoRelacionado; 
		lbNome = new JLabel("<html><font Color='#FF4500'>*</font> Nome:</html>");lbNome.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbData = new JLabel("<html><font Color='#FF4500'>*</font> Data do Evento:</html>");lbData.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0,Color.decode("200200200")));
		lbHorario = new JLabel("<html><font Color='#FF4500'>*</font> Horario:</html>");lbHorario.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbDuracao = new JLabel("<html><font Color='#FF4500'>*</font> Duracao:</html>");lbDuracao.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbDescricao = new JLabel("<html><font Color='#FF4500'>*</font> Descrição:</html>");lbDescricao.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbTipo= new JLabel("Tipo do Evento:");lbTipo.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbContatoRelacionado = new JLabel("Contatos Relacionados");lbContatoRelacionado.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));

		JScrollPane pnScrollDescricao = new JScrollPane(addEventoDescricao);
		pnScrollDescricao.setWheelScrollingEnabled(true);
		pnScrollDescricao.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));

		addEventoContatoRelacionado = new JComboBox();
		if(ehAtualizacao || ehVisualizacao){
			addEventoContatoRelacionado = new JComboBox(todosContatos(evento));
		}
		addEventoContatoRelacionado.setPreferredSize(new Dimension(150,30));
		addEventoContatoRelacionado.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));

		JScrollPane scContatosRelacionados = new JScrollPane(addEventoContatoRelacionado);
		scContatosRelacionados.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
		scContatosRelacionados.setWheelScrollingEnabled(true);

		p1.add(lbNome);p1.add(addEventoNome);
		p1.add(lbData);p1.add(addEventoData);
		p1.add(lbHorario);p1.add(addEventoHorario);
		p1.add(lbDuracao);p1.add(addEventoDuracao);
		p1.add(lbTipo);p1.add(addEventoTipo);
		p1.add(lbDescricao);p1.add(pnScrollDescricao);
		p1.add(lbContatoRelacionado);p1.add(scContatosRelacionados);
		p1.add(new JLabel("<html><font Color='#FF4500' size='2'><b>* Item Obrigatorio!</html>"));

		JPanel pButton = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		pButton.setBackground(Color.white);

		if(!ehAtualizacao && !ehVisualizacao){
			btAddEventoAddContato = new JLabel("<html><font size=3> Add Contato </html>");
			btAddEventoAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAddEventoCadastrar = new JLabel("<html><font size=3> Cadastrar </html>");
			btAddEventoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAddEventoAddFoto = new JLabel("<html><font size=3> Add Foto </html>");
			btAddEventoAddFoto.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			pButton.add(btAddEventoAddFoto);
			pButton.add(btAddEventoAddContato);
			pButton.add(btAddEventoCadastrar);	

			btAddEventoAddAudio = new JLabel("<html><font size=3 color='#FFFFFF'> Add Anotação </html>");
			btAddEventoAddAudio.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAddEventoAudioCadastrar = new JLabel("<html><font size=3 color='#FFFFFF'> Cadastrar </html>");
			btAddEventoAudioCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			audioBottom.add(btAddEventoAddAudio); 
			audioBottom.add(btAddEventoAudioCadastrar);

			btAnotacaoAddNote = new JLabel("<html><font size=3 color='#FFFFFF'> Adicionar </html>");
			btAnotacaoAddNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAnotacaoRemoverNote = new JLabel("<html><font size=3 color='#FFFFFF'> Remover </html>");
			btAnotacaoRemoverNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			anotacaoBottom.add(btAnotacaoAddNote);
			anotacaoBottom.add(btAnotacaoRemoverNote);
			
			btAddEventoAudioCadastrar.addMouseListener(this);
			btAddEventoCadastrar.addMouseListener(this);
			btAddEventoAddFoto.addMouseListener(this);
			btAddEventoAddContato.addMouseListener(this);
			btAddEventoAddAudio.addMouseListener(this);
			btAnotacaoAddNote.addMouseListener(this);
			btAnotacaoRemoverNote.addMouseListener(this);
		}else if(ehAtualizacao && !ehVisualizacao){
			preencheTabelaAudio(evento);
			preencheTabelaAnotacao(evento);
			adicionaFotosNoPainel(null, evento);
			addEventoData.setText(evento.getData());
			addEventoDescricao.setText(evento.getDescricao());
			addEventoDuracao.setText(evento.getDuracao());
			addEventoHorario.setText(evento.getHorario());
			addEventoNome.setText(evento.getNome());
			addEventoTipo.setText(evento.getTipo());

			btAddEventoAtualiza = new JLabel("<html><font size=3> Atualizar </html>");
			btAddEventoAtualiza.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAddEventoAddContato = new JLabel("<html><font size=3> Add Contato </html>");
			btAddEventoAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAddEventoAddFoto = new JLabel("<html><font size=3> Add Foto </html>");
			btAddEventoAddFoto.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			pButton.add(btAddEventoAddFoto);
			pButton.add(btAddEventoAtualiza);
			pButton.add(btAddEventoAddContato);

			btAddEventoAddAudio = new JLabel("<html><font size=3 color='#FFFFFF'> Add Anotação </html>");
			btAddEventoAddAudio.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAddEventoAudioAtualizar = new JLabel("<html><font size=3 color='#FFFFFF'> Atualizar </html>");
			btAddEventoAudioAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			audioBottom.add(btAddEventoAddAudio); 
			audioBottom.add(btAddEventoAudioAtualizar);

			btAnotacaoAddNote = new JLabel("<html><font size=3 color='#FFFFFF'> Adicionar </html>");
			btAnotacaoAddNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			btAnotacaoRemoverNote = new JLabel("<html><font size=3 color='#FFFFFF'> Remover </html>");
			btAnotacaoRemoverNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
			anotacaoBottom.add(btAnotacaoAddNote);
			anotacaoBottom.add(btAnotacaoRemoverNote);
			
			btAddEventoAudioAtualizar.addMouseListener(this);
			btAddEventoAddFoto.addMouseListener(this);
			btAddEventoAddContato.addMouseListener(this);
			btAddEventoAtualiza.addMouseListener(this);
			btAddEventoAddAudio.addMouseListener(this);
			btAnotacaoAddNote.addMouseListener(this);
			btAnotacaoRemoverNote.addMouseListener(this);
		}else if(ehVisualizacao){
			preencheTabelaAudio(evento);
			preencheTabelaAnotacao(evento);
			adicionaFotosNoPainel(null, evento);					
			addEventoData.setText(evento.getData());
			addEventoDescricao.setText(evento.getDescricao());
			addEventoDuracao.setText(evento.getDuracao());
			addEventoHorario.setText(evento.getHorario());
			addEventoNome.setText(evento.getNome());
			addEventoTipo.setText(evento.getTipo());

			addEventoData.setEnabled(false);
			addEventoDescricao.setEnabled(false);
			addEventoDuracao.setEnabled(false);
			addEventoHorario.setEnabled(false);
			addEventoNome.setEnabled(false);
			addEventoTipo.setEnabled(false);
		}

		btAddEventoCancelar = new JLabel("<html><font size=3> Cancelar </html>");
		btAddEventoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));

		pButton.add(btAddEventoCancelar);
		p1.add(pButton);

		btAddEventoCancelar.addMouseListener(this);
		btAudioPlay = new JLabel("<html><font size=3 color='#FFFFFF'> Reproduzir </html>");
		btAudioPlay.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		btAudioStop = new JLabel("<html><font size=3 color='#FFFFFF'> Parar </html>");
		btAudioStop.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		audioBottom.add(btAudioPlay); audioBottom.add(btAudioStop);

		btAnotacaoVisualizar = new JLabel("<html><font size=3 color='#FFFFFF'> Visualizar </html>");
		btAnotacaoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		anotacaoBottom.add(btAnotacaoVisualizar);

		btAudioPlay.addMouseListener(this);
		btAudioStop.addMouseListener(this);
		btAnotacaoVisualizar.addMouseListener(this);
	}

	/*
	 * Cadastra novo evento
	 */
	private void cadastraEvento() throws Exception{
		String nome,data,horario,duracao,descricao,tipo;
		Evento evento = null;

		nome = addEventoNome.getText();
		data = addEventoData.getText();
		horario = addEventoHorario.getText();
		duracao = addEventoDuracao.getText();
		descricao = addEventoDescricao.getText();
		tipo = addEventoTipo.getToolTipText();

		if(Verificador.ehVazio(nome)){
			throw new Exception("Digite um nome");
		}else	if(!Verificador.ehDataComAnoValida(data)){
			throw new Exception("<html>Digite uma data valida<br>dd/mm/aaaa</html>");
		}else if(!Verificador.ehHorarioValido(horario)){
			throw new Exception("<html>Digite um horario valido<br>hh:mm</html>");
		}else if(!Verificador.ehHorarioValido(duracao)){
			throw new Exception("<html>Digite uma duração<br>hh:mm</html>");
		}else if(Verificador.ehVazio(descricao)){
			throw new Exception("Digite uma descrição para o evento");
		}

		evento = new Evento(nome, data,horario,duracao,descricao);
		evento.setTipo(tipo);
		for(int i = 0; i < addEventoContatoRelacionado.getItemCount(); i++){
			evento.AdicionaContatoAEvento((Contato)addEventoContatoRelacionado.getItemAt(i));
		}
		File dir = new File("uses/"+this.usuario.getEmail()+"/imagens/"+evento.hashCode());
		dir.mkdirs();
		for(File f: listFotos){
			try{
				String destino = "uses/"+this.usuario.getEmail()+"/imagens/"+evento.hashCode()+"/"+f.getName();
				Utilitarios.salvaFoto(f, destino);
				evento.adicionarFoto(new File(destino));
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
			}
		}
		if(this.usuario.addEvento(evento, false) != null){
			if(JOptionPane.showConfirmDialog(frameAddEvento,"<html>Já existe um evento no mesmo horário.<br>Deseja sobrecarregar esse horário?</html>") == JOptionPane.YES_OPTION){
				this.usuario.addEvento(evento, true);
			}else{
				throw new Exception("Evento não cadastrado.");
			}
		}
		File dirAudio = new File("uses/"+this.usuario.getEmail()+"/audio/"+evento.hashCode());
		dirAudio.mkdirs();
		for(File f: listAudio){
			try{
				String destino = "uses/"+this.usuario.getEmail()+"/audio/"+evento.hashCode()+"/"+f.getName();
				Utilitarios.copia(f, new File(destino));
				evento.adicionaAudio(new File(destino));
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
			}
		}
		for(Anotacao a: listAnotacoes){
			evento.adicionaAnotacao(a);
		}
		JOptionPane.showMessageDialog(frameAddEvento,"Evento criado com sucesso");
	}

	//Atributos da janela de cadastro de usuario no sistema---------------------------------------------------// CADASTRA NOVO USUARIO
	private JFrame frameCadastro;
	private JLabel lbFoto,btCadastroCadastrar,btCadastroCancelar;
	private JTextField nome,dataNascimento,telefone,email,endereco;
	private JPasswordField senha;
	private String enderecoFotoPerfil = "imagens/foto.jpg";
	private ImageIcon imgPerfil;

	/*
	 * Cadastra novo usuario no sistema
	 */
	private Usuario cadastra() throws Exception{
		Usuario use;
		Perfil temp = new Perfil();
		String nome = null, email = null, senha;
		senha = "";
		for(char c: this.senha.getPassword()){ //Pega a senha do campo de texto Senha
			senha += c;
		}
		if(!Verificador.ehVazio(this.nome.getText()) && Verificador.ehEmailValido(this.email.getText()) && !Verificador.ehVazio(senha)){
			nome = this.nome.getText();
			email = this.email.getText();
			temp = new Perfil(nome,email);
			if(Verificador.ehTelefoneValido(this.telefone.getText()) || this.telefone.getText().equals(STRING_VAZIA)){
				temp.setTelefone(this.telefone.getText());
			}else{
				throw new Exception("<html>Telefone Invalido<br>(DDD)0000-0000</html>");
			}
			if(Verificador.ehDataComAnoValida(this.dataNascimento.getText()) || this.dataNascimento.getText().equals(STRING_VAZIA)){
				temp.setDataNascimento(this.dataNascimento.getText());
			}else{
				throw new Exception("<html>Data Invalida<br>dd/mm/aaaa</html>");
			}
			temp.setEndereco(this.endereco.getText());
		}else{
			if(Verificador.ehVazio(this.nome.getText())){
				throw new Exception("Nome invalido");
			}else if(!Verificador.ehEmailValido(this.email.getText())){
				throw new Exception("Email invalido<br>nome@host</html>");
			}else if(Verificador.ehVazio(senha)){
				throw new Exception("Digite uma Senha");
			}
		}
		use = new Usuario(email, senha,temp);
		File dir = new File("uses/"+use.getEmail()+"/imagens");
		dir.mkdirs(); //Cria pasta do usuario no sistema
		Utilitarios.salvaFoto(new File(enderecoFotoPerfil), "uses/"+use.getEmail()+"/imagens/fotoPerfil.jpg");
		return use;
	}

	/*
	 * Fecha janela de cadastro
	 */
	private void fechaFrameCadastro(){
		frameCadastro.setVisible(false);
		frameCadastro = null;
	}

	private void adicionaFotoPerfil(BufferedImage img){
		imgPerfil.setImage(img);
	}

	/*
	 * Controi janela Cadastro
	 */
	private void constroiJanelaCadastro(){
		frameCadastro = new JFrame("Diario MultiTudo - Cadastro");	
		frameCadastro.setVisible(true);
		frameCadastro.setResizable(true);
		frameCadastro.setSize(500, 550);
		frameCadastro.setLocationRelativeTo(frameLogin);

		JPanel wrapper = new JPanel();
		wrapper.setLayout(new BoxLayout(wrapper,BoxLayout.LINE_AXIS));
		frameCadastro.add(wrapper);

		JPanel p1 = new JPanel(), p2 = new JPanel(),pFoto = new JPanel();
		p2.setBackground(Color.white);
		pFoto.setLayout(new BorderLayout());
		pFoto.setBackground(Color.white);
		p2.setLayout(new FlowLayout(FlowLayout.CENTER));
		p1.setLayout(new GridLayout(15,1));
		p1.setBackground(Color.white);
		p1.setBorder(BorderFactory.createEmptyBorder(0, 10, 5, 10));
		wrapper.add(p2);
		wrapper.add(p1);

		imgPerfil = new ImageIcon(enderecoFotoPerfil);

		lbFoto = new JLabel(imgPerfil);
		lbFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.decode("200200200")));

		pFoto.add(lbFoto, BorderLayout.PAGE_START);
		pFoto.add(new JLabel("<html><font size='2' color='#cccccc'><i>Clique na foto para alterá-la</i></html>"));
		p2.add(pFoto);

		nome = new JTextField("",20);
		nome.setToolTipText("Digite seu nome");
		nome.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		dataNascimento = new JTextField("",12);
		dataNascimento.setToolTipText("dd/mm/aaaa");
		dataNascimento.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		email = new JTextField("",20);
		email.setToolTipText("fulano@servidor");
		email.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		senha = new JPasswordField("",30);
		senha.setToolTipText("Senha com pelo menos 6 caracteres.");
		senha.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		telefone = new JTextField("",10);
		telefone.setToolTipText("(83)5555-0123");
		telefone.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));
		endereco = new JTextField("",30);
		endereco.setToolTipText("Digite seu endereco");
		endereco.setBorder(BorderFactory.createMatteBorder(0, 0, 5, 0, Color.DARK_GRAY));

		JLabel lbNome, lbDataNascimento, lbTelefone, lbEmail, lbEndereco, lbSenha; 
		lbNome = new JLabel("<html><font Color='#FF4500'>*</font> Nome:</html>");lbNome.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbDataNascimento = new JLabel("Data de Nascimento:");lbDataNascimento.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0,Color.decode("200200200")));
		lbEmail = new JLabel("<html><font Color='#FF4500'>*</font> Email:</html>");lbEmail.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbTelefone = new JLabel("Telefone:");lbTelefone.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbEndereco = new JLabel("Endereco:");lbEndereco.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));
		lbSenha = new JLabel("<html><font Color='#FF4500'>*</font> Senha:</html>");lbSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 2, 0, Color.decode("200200200")));

		p1.add(lbNome);p1.add(nome);
		p1.add(lbEmail);p1.add(email);
		p1.add(lbSenha);p1.add(senha);
		p1.add(lbDataNascimento);p1.add(dataNascimento);
		p1.add(lbTelefone);p1.add(telefone);
		p1.add(lbEndereco);p1.add(endereco);
		p1.add(new JLabel("<html><font Color='#FF4500' size='2'><b>* Item Obrigatorio!</html>"));

		JPanel pButton = new JPanel(new FlowLayout(FlowLayout.RIGHT));
		pButton.setBackground(Color.white);
		btCadastroCadastrar = new JLabel("<html><font size=3>Cadastrar</html>");
		btCadastroCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		btCadastroCancelar = new JLabel("<html><font size=3> Cancelar </html>");
		btCadastroCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		pButton.add(btCadastroCadastrar);
		pButton.add(btCadastroCancelar);
		p1.add(pButton);

		btCadastroCadastrar.addMouseListener(this);
		btCadastroCancelar.addMouseListener(this);
		lbFoto.addMouseListener(this);
	}

	//Salva modificacoes no usuario----------------------------------------------------------------------------// SALVA TUDO
	private void salvaModificacoes(Usuario use) throws Exception{
		try{
			ArrayList<Usuario> listUsuarios = Utilitarios.readArquivoCadastro();
			listUsuarios.remove(use);
			listUsuarios.add(use);
			Utilitarios.writeArquivoCadastro(listUsuarios);
		}catch(Exception erro){
			throw new Exception(erro.getMessage());
		}
	}
	//Config dos eventos----------------------------------------------------------------------------------------// LISTENERS

	/*
	 * Efeito quando o botao esquerdo do mouse clica sobre um botao
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void mouseClicked(MouseEvent event) {
		if(event.getSource() == lbFoto){
			JFileChooser fileChooser = new JFileChooser();
			if(fileChooser.showOpenDialog(frameCadastro) == JFileChooser.APPROVE_OPTION){
				try{
					adicionaFotoPerfil(Utilitarios.redimensionaImagem(fileChooser.getSelectedFile(), 150, 150));
					enderecoFotoPerfil = fileChooser.getSelectedFile().getAbsolutePath();
					Utilitarios.repaint(frameCadastro);
				}catch(Exception erro){
					JOptionPane.showMessageDialog(frameCadastro, erro.getMessage());
				}
			}
		}else if(event.getSource() == btCadastroCadastrar){
			Usuario newUsuario;
			try {
				newUsuario = cadastra();
				try{
					Utilitarios.salvaCadastro(newUsuario);
					JOptionPane.showMessageDialog(frameCadastro, "Usuario cadastrado com sucesso.");
				}catch(Exception erro){
					JOptionPane.showMessageDialog(frameCadastro, erro.getMessage());
				}
				fechaFrameCadastro();
			} catch (Exception e) {
				JOptionPane.showMessageDialog(frameCadastro, e.getMessage(),"Campo Invalido", JOptionPane.WARNING_MESSAGE);
			}			
		}else if(event.getSource() == btCadastroCancelar){
			fechaFrameCadastro();
		}else if(event.getSource() == btLoginCadastrar){
			constroiJanelaCadastro();
		}else if(event.getSource() == btLoginEntrar){
			try{
				this.usuario = Utilitarios.efetuaLogin(tfLoginEmail.getText(),tfLoginSenha.getPassword());
				fechaFrameLogin();
				constroiJanelaPrincipal(this.usuario);
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameLogin, erro.getMessage());
			}
		}else if(event.getSource() == btLoginCancelar){
			System.exit(0);
		}else if(event.getSource() == btPrincipalLogout){
			try{
				salvaModificacoes(this.usuario);
			}catch(Exception erro){
				JOptionPane.showMessageDialog(framePrincipal, erro.getMessage());
			}
			fechaFramePrincipal();
			constroiJanelaLogin();
		}else if(event.getSource() == btPrincipalEditarPefil){
			constroiJanelaEditarPerfil(this.usuario);
		}else if(event.getSource() == btPrincipalAddContato){
			constroiJanelaAddContato(false,false, null);
		}else if(event.getSource() == btPrincipalAddEvento){
			constroiJanelaAddEvento(false,false, null);
		}else if(event.getSource() == btAddContatoCadastrar){
			try {
				cadastraContato();
				fechaFrameAddContato();
				atualizaTela();
			} catch(Exception e) {
				JOptionPane.showMessageDialog(frameAddContato, e.getMessage(), "Campo invalido", JOptionPane.WARNING_MESSAGE);
			}
		}else if(event.getSource() == btAddContatoCancelar){
			fechaFrameAddContato();
		}else if(event.getSource() == btAddEventoCadastrar){
			try {
				cadastraEvento();
				fechaFrameAddEvento();
				atualizaTela();
			} catch (Exception e) {
				JOptionPane.showMessageDialog(frameAddEvento, e.getMessage(), "Alerta", JOptionPane.WARNING_MESSAGE);
			}			
		}else if(event.getSource() == btAddEventoCancelar){
			fechaFrameAddEvento();
		}else if(event.getSource() == btEditarPerfilAtualizar){
			String pass = "";
			for(char c: editarPerfilSenhaAtual.getPassword()){
				pass += c;
			}
			try{
				if(editarPerfilSenhaNova.getPassword().length == 0){
					atualizaPerfil();
					fechaFrameEditarPerfil();
				}else if(this.usuario.comparaSenha(pass) && editarPerfilSenhaNova.getPassword().length > 0){
					atualizaPerfil();
					fechaFrameEditarPerfil();
				}else if(!this.usuario.comparaSenha(pass) && editarPerfilSenhaNova.getPassword().length > 0){
					JOptionPane.showMessageDialog(frameEditarPerfil, "Digite a sua senha atual corretamente", "Alerta", JOptionPane.WARNING_MESSAGE);
				}
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameEditarPerfil, erro.getMessage(), "Campo Invalido", JOptionPane.WARNING_MESSAGE);
			}
			atualizaTela();
		}else if(event.getSource() == btEditarPerfilCancelar){
			fechaFrameEditarPerfil();
		}else if(event.getSource() == btPrincipalBuscaContato){
			constroiJanelaBuscaContato(false, procuraContato(tfPrincipalBuscaContato.getText()));
		}else if(event.getSource() == btBuscaContatoEditar){
			contatoSelecionado = (Contato)cbContatosAchados.getSelectedItem();
			constroiJanelaAddContato(true,false, contatoSelecionado);
			fechaFrameBuscaContato();
		}else if(event.getSource() == btBuscaContatoRemove){
			if(!nenhumContatoLocalizado){
				Contato c1 = (Contato) cbContatosAchados.getSelectedItem();
				this.usuario.removeContato(c1);
				removeContatoTabela(new String[]{c1.getNome()});
				fechaFrameBuscaContato();
				JOptionPane.showMessageDialog(frameBuscaContato, "Contato removido com sucesso.");
				fechaFramePrincipal(); constroiJanelaPrincipal(this.usuario);
			}
		}else if(event.getSource() == btPrincipalBuscaEventoPorNome){
			constroiJanelaBuscaEvento(procuraEvento(tfPrincipalBuscaEventoPorNome.getText()));
		}else if(event.getSource() == btBuscaEventoRemove){
			if(!nenhumEventoLocalizado){
				Evento e1 = (Evento) cbEventosAchados.getSelectedItem();
				removeEvento(this.usuario, e1);
				fechaFrameBuscaEvento();
				JOptionPane.showMessageDialog(frameBuscaEvento, "Evento removido com sucesso.");
				fechaFramePrincipal(); constroiJanelaPrincipal(this.usuario);
			}
		}else if(event.getSource() == btPrincipalBuscaEventoPorContato){
			ehBuscaEventoPorContato = true;
			constroiJanelaBuscaContato(true, procuraContato(tfPrincipalBuscaEventoPorContato.getText()));
		}else if(event.getSource() == btBuscaContatoSelecionar){
			contatoRetorno = (Contato)cbContatosAchados.getSelectedItem();
			fechaFrameBuscaContato();
			if(ehBuscaEventoPorContato){
				constroiJanelaBuscaEvento(procuraEvento(contatoRetorno));
				ehBuscaEventoPorContato = false;
			}else if(ehAddContatoAEvento){
				addEventoContatoRelacionado.addItem((Contato)cbContatosAchados.getSelectedItem());
				frameAddEvento.repaint();
				ehAddContatoAEvento = false;
			}
		}else if(event.getSource() == btAddContatoAtualizar){
			try{
				atualizaContato((Contato)cbContatosAchados.getSelectedItem());
				fechaFrameAddContato();
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddContato, erro.getMessage(),"Campo invalido", JOptionPane.WARNING_MESSAGE);
			}
		}else if(event.getSource() == btAddEventoAtualiza){
			try{
				atualizaEvento((Evento)cbEventosAchados.getSelectedItem());
				fechaFrameAddEvento();
				atualizaTela();				
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddContato, erro.getMessage(),"Campo invalido", JOptionPane.WARNING_MESSAGE);
			}
		}else if(event.getSource() == btBuscaEventoEditar){
			listAudio = new ArrayList<File>(); listAnotacoes = new ArrayList<Anotacao>();
			dadosTabelaAudio = new ArrayList<Object>();
			constroiJanelaAddEvento(true,false, (Evento)cbEventosAchados.getSelectedItem());
			fechaFrameBuscaEvento();
		}else if(event.getSource() == btBuscaEventoVisualizar){
			constroiJanelaAddEvento(false, true, (Evento)cbEventosAchados.getSelectedItem());
			fechaFrameBuscaEvento();
		}else if(event.getSource() == btBuscaContatoVisualizar){
			constroiJanelaAddContato(false, true, (Contato)cbContatosAchados.getSelectedItem());
			fechaFrameBuscaContato();
		}else if(event.getSource() == btBuscaFormaDeContatoRemover){
			if(contatoSelecionado.getFormasDeContato().size() > 1){
				contatoSelecionado.removeFormaDeContato((FormaDeContato)cbFormaDeContatoEncontrados.getSelectedItem());
				JOptionPane.showMessageDialog(frameBuscaFormaDeContato, "Forma de Contato Removida com sucesso!");
			}else{
				JOptionPane.showMessageDialog(frameBuscaFormaDeContato, "<html>Não foi possível remover!<br>Deve existir pelo menos uma Forma de Contato.");
			}
			fechaFrameAddContato();
			fechaFrameBuscaFormaDeContato();
			constroiJanelaAddContato(true, false, contatoSelecionado);
		}else if(event.getSource() == btRemoverFormaDeContato){
			constroiJanelaBuscaFormaDeContato(procuraFormaDeContatos(contatoSelecionado));
		}else if(event.getSource() == btPrincipalRefresh){
			atualizaTela();
		}else if(event.getSource() == btAddEventoAddContato){
			Contato[] list = new Contato[this.usuario.getContatos().size()];
			for(int i = 0; i < this.usuario.getContatos().size(); i++){
				list[i] = this.usuario.getContatos().get(i);
			}
			constroiJanelaBuscaContato(true, list);
			ehAddContatoAEvento = true;
		}else if(event.getSource() == btAddEventoAddFoto){
			JFileChooser fileChooser = new JFileChooser();
			if(fileChooser.showOpenDialog(frameAddEvento) == JFileChooser.APPROVE_OPTION){
				adicionaFotosNoPainel(fileChooser.getSelectedFile(), null);
				Utilitarios.repaint(pFotos);
			}
		}else if(event.getSource() == lbEditarPerfilFoto){
			JFileChooser fileChooser = new JFileChooser();
			if(fileChooser.showOpenDialog(frameEditarPerfil) == JFileChooser.APPROVE_OPTION){
				try{
					adicionaFotoEditaPerfil(Utilitarios.redimensionaImagem(fileChooser.getSelectedFile(), 150, 150));
					novoEnderecoFotoPerfil = fileChooser.getSelectedFile().getAbsolutePath();
					Utilitarios.repaint(frameEditarPerfil);
				}catch(Exception erro){
					JOptionPane.showMessageDialog(frameEditarPerfil, erro.getMessage());
				}
			}
		}else if(event.getSource() == btAddEventoAddAudio){
			fileChooser= new JFileChooser();
			fileChooser.setFileFilter(new FileFilter() {
				public String getDescription() {return null;}
				public boolean accept(File f) {
					if (f.isDirectory()) {
						return true;
					}
					String extension = Utilitarios.getExtension(f);
					if (extension != null) {
						if (extension.equals("mp3") || (extension.equals("wma")) || (extension.equals("mid")) || (extension.equals("wav"))){
							return true;
						} else {
							return false;
						}
					}
					return false;
				}
			});
			if(fileChooser.showOpenDialog(frameAddEvento) == JFileChooser.APPROVE_OPTION){
				try {
					listAudio.add(fileChooser.getSelectedFile());
					addTabelaAudio(new String[]{fileChooser.getSelectedFile().getName()});
				} catch (Exception e1) {
					JOptionPane.showConfirmDialog(frameAddEvento, e1.getMessage());
				}
				Utilitarios.repaint(frameAddEvento);
			}						
		}else if(event.getSource() == btAudioPlay){
			try{
				if(tbAudioAdicionados.getSelectedRow() != -1){
					audio = new AudioPlayer(listAudio.get(tbAudioAdicionados.getSelectedRow()));
					audio.play(); btAudioPlay.removeMouseListener(this);
					lbStatus.setText("Tocando: "+listAudio.get(tbAudioAdicionados.getSelectedRow()).getName());
				}
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddEvento, erro.getMessage());
			}
		}else if(event.getSource() == btAudioStop){
			if(audio != null){
				audio.stop(); lbStatus.setText("Selecione uma anotação para reproduzir");
				btAudioPlay.addMouseListener(this);
			}
		}else if(event.getSource() == btAddEventoAudioAtualizar){
			try{
				atualizaEvento((Evento)cbEventosAchados.getSelectedItem());
				fechaFrameAddEvento();
				atualizaTela();				
			}catch(Exception erro){
				JOptionPane.showMessageDialog(frameAddContato, erro.getMessage(),"Campo invalido", JOptionPane.WARNING_MESSAGE);
			}
		}else if(event.getSource() == btAddEventoAudioCadastrar){
			try {
				cadastraEvento();
				fechaFrameAddEvento();
				atualizaTela();
			} catch (Exception e) {
				JOptionPane.showMessageDialog(frameAddEvento, e.getMessage(), "Alerta", JOptionPane.WARNING_MESSAGE);
			}	
		}else if(event.getSource() == btLoginEsqueciSenha){
			constroiJanelaRecuperaSenha();
		}else if(event.getSource() == btRecuperarSenha){
			if(Verificador.ehEmailValido(tfRecuperaSenhaEmail.getText())){
				try{
					Usuario.recuperaSenha(Utilitarios.readArquivoCadastro(), tfRecuperaSenhaEmail.getText());
					JOptionPane.showMessageDialog(frameRecuperaSenha, "Senha enviada para seu Email de cadastro.");
					fechaFrameRecuperaSenha();
				}catch(Exception erro){
					JOptionPane.showMessageDialog(frameRecuperaSenha, erro.getMessage());
				}
			}else{
				JOptionPane.showMessageDialog(frameRecuperaSenha,"Email invalido\nDigite um email da forma: nome@host.dominio");
			}
		}else if(event.getSource() == btAnotacaoAddNote){
			constroiJanelaInserirNota(false, null);
		}else if(event.getSource() == btAnotacaoInserirNotaOK){
			Anotacao nota = new Anotacao(taInserirNota.getText());
			listAnotacoes.add(nota);
			addTabelaAnotacao(new String[]{nota.getNote(), nota.getData(), nota.getHora()});
			fechaJanelaInserirNota();
			Utilitarios.repaint(frameAddEvento);
		}else if(event.getSource() == btAnotacaoInserirNotaCancelar){
			fechaJanelaInserirNota();
		}else if(event.getSource() == btAnotacaoVisualizar){
			if(tbAnotacoesAdicionadas.getSelectedRow() != -1){
				constroiJanelaInserirNota(true, listAnotacoes.get(tbAnotacoesAdicionadas.getSelectedRow()));
			}
		}else if(event.getSource() == btAnotacaoRemoverNote){
			if(tbAnotacoesAdicionadas.getSelectedRow() != -1 && tbAnotacoesAdicionadas.getRowCount() > 0){
				listAnotacoes.remove(tbAnotacoesAdicionadas.getSelectedRow());
				removeLinhaTabelaAnotacao(tbAnotacoesAdicionadas.getSelectedRow());
				Utilitarios.repaint(frameAddEvento);
			}
		}
	}

	/*
	 * Efeito quando o mouse fica sobre o botao
	 */
	@Override
	public void mouseEntered(MouseEvent event) {
		if(event.getSource() == btCadastroCadastrar){
			btCadastroCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btCadastroCancelar){
			btCadastroCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btLoginCadastrar){
			btLoginCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btLoginCancelar){
			btLoginCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btLoginEntrar){
			btLoginEntrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btPrincipalAddContato){
			btPrincipalAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btPrincipalAddEvento){
			btPrincipalAddEvento.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btPrincipalLogout){
			btPrincipalLogout.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAddContatoCadastrar){
			btAddContatoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAddContatoCancelar){
			btAddContatoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btPrincipalEditarPefil){
			btPrincipalEditarPefil.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.white));
		}else if(event.getSource() == btAddEventoCadastrar){
			btAddEventoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAddEventoCancelar){
			btAddEventoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btEditarPerfilAtualizar){
			btEditarPerfilAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btEditarPerfilCancelar){
			btEditarPerfilCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btBuscaContatoRemove){
			btBuscaContatoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btPrincipalBuscaContato){
			btPrincipalBuscaContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btPrincipalBuscaEventoPorNome){
			btPrincipalBuscaEventoPorNome.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btBuscaEventoRemove){
			btBuscaEventoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btBuscaContatoSelecionar){
			btBuscaContatoSelecionar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btBuscaContatoEditar){
			btBuscaContatoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btBuscaEventoEditar){
			btBuscaEventoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAddEventoAtualiza){
			btAddEventoAtualiza.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAddContatoAtualizar){
			btAddContatoAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btBuscaFormaDeContatoRemover){
			btBuscaFormaDeContatoRemover.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btRemoverFormaDeContato){
			btRemoverFormaDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btBuscaContatoVisualizar){
			btBuscaContatoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btPrincipalRefresh){
			btPrincipalRefresh.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.white));
		}else if(event.getSource() == btAddEventoAddContato){
			btAddEventoAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAddEventoAddFoto){
			btAddEventoAddFoto.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == lbFoto){
			lbFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.DARK_GRAY));
		}else if(event.getSource() == lbEditarPerfilFoto){
			lbEditarPerfilFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.DARK_GRAY));
		}else if(event.getSource() == btAudioStop){
			btAudioStop.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAudioPlay){
			btAudioPlay.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAddEventoAddAudio){
			btAddEventoAddAudio.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAddEventoAudioAtualizar){
			btAddEventoAudioAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAddEventoAudioCadastrar){
			btAddEventoAudioCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btLoginEsqueciSenha){
			btLoginEsqueciSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btRecuperarSenha){
			btRecuperarSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAnotacaoAddNote){
			btAnotacaoAddNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAnotacaoInserirNotaOK){
			btAnotacaoInserirNotaOK.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAnotacaoInserirNotaCancelar){
			btAnotacaoInserirNotaCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAnotacaoVisualizar){
			btAnotacaoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}else if(event.getSource() == btAnotacaoRemoverNote){
			btAnotacaoRemoverNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.white));
		}
	}

	/*
	 * Efeito quando o botao e soltado
	 */
	@Override
	public void mouseExited(MouseEvent event) {
		if(event.getSource() == btCadastroCadastrar){
			btCadastroCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btCadastroCancelar){
			btCadastroCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btLoginCadastrar){
			btLoginCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btLoginCancelar){
			btLoginCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btLoginEntrar){
			btLoginEntrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalAddContato){
			btPrincipalAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalAddEvento){
			btPrincipalAddEvento.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalLogout){
			btPrincipalLogout.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddContatoCadastrar){
			btAddContatoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddContatoCancelar){
			btAddContatoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalEditarPefil){
			btPrincipalEditarPefil.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.orange));
		}else if(event.getSource() == btAddEventoCadastrar){
			btAddEventoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddEventoCancelar){
			btAddEventoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btEditarPerfilAtualizar){
			btEditarPerfilAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btEditarPerfilCancelar){
			btEditarPerfilCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaContatoRemove){
			btBuscaContatoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalBuscaContato){
			btPrincipalBuscaContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalBuscaEventoPorNome){
			btPrincipalBuscaEventoPorNome.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaEventoRemove){
			btBuscaEventoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaContatoSelecionar){
			btBuscaContatoSelecionar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaContatoEditar){
			btBuscaContatoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaEventoEditar){
			btBuscaEventoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddEventoAtualiza){
			btAddEventoAtualiza.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddContatoAtualizar){
			btAddContatoAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaFormaDeContatoRemover){
			btBuscaFormaDeContatoRemover.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btRemoverFormaDeContato){
			btRemoverFormaDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btBuscaContatoVisualizar){
			btBuscaContatoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btPrincipalRefresh){
			btPrincipalRefresh.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.orange));
		}else if(event.getSource() == btAddEventoAddContato){
			btAddEventoAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddEventoAddFoto){
			btAddEventoAddFoto.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == lbFoto){
			lbFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.decode("200200200")));
		}else if(event.getSource() == lbEditarPerfilFoto){
			lbEditarPerfilFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.decode("200200200")));
		}else if(event.getSource() == btAudioStop){
			btAudioStop.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAudioPlay){
			btAudioPlay.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddEventoAddAudio){
			btAddEventoAddAudio.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddEventoAudioAtualizar){
			btAddEventoAudioAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAddEventoAudioCadastrar){
			btAddEventoAudioCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btLoginEsqueciSenha){
			btLoginEsqueciSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btRecuperarSenha){
			btRecuperarSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAnotacaoAddNote){
			btAnotacaoAddNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAnotacaoInserirNotaOK){
			btAnotacaoInserirNotaOK.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAnotacaoInserirNotaCancelar){
			btAnotacaoInserirNotaCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAnotacaoVisualizar){
			btAnotacaoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}else if(event.getSource() == btAnotacaoRemoverNote){
			btAnotacaoRemoverNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.orange));
		}
	}

	/*
	 * Efeito quando o botao e pressionado
	 */
	@Override
	public void mousePressed(MouseEvent event) {
		if(event.getSource() == btCadastroCadastrar){
			btCadastroCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));		
		}else if(event.getSource() == btCadastroCancelar){
			btCadastroCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btLoginCadastrar){
			btLoginCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btLoginCancelar){
			btLoginCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btLoginEntrar){
			btLoginEntrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalAddContato){
			btPrincipalAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalAddEvento){
			btPrincipalAddEvento.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalLogout){
			btPrincipalLogout.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddContatoCadastrar){
			btAddContatoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddContatoCancelar){
			btAddContatoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalEditarPefil){
			btPrincipalEditarPefil.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.black));
		}else if(event.getSource() == btAddEventoCadastrar){
			btAddEventoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddEventoCancelar){
			btAddEventoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btEditarPerfilAtualizar){
			btEditarPerfilAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btEditarPerfilCancelar){
			btEditarPerfilCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaContatoRemove){
			btBuscaContatoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalBuscaContato){
			btPrincipalBuscaContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalBuscaEventoPorNome){
			btPrincipalBuscaEventoPorNome.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaEventoRemove){
			btBuscaEventoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaContatoSelecionar){
			btBuscaContatoSelecionar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaContatoEditar){
			btBuscaContatoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaEventoEditar){
			btBuscaEventoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddEventoAtualiza){
			btAddEventoAtualiza.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddContatoAtualizar){
			btAddContatoAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaFormaDeContatoRemover){
			btBuscaFormaDeContatoRemover.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btRemoverFormaDeContato){
			btRemoverFormaDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btBuscaContatoVisualizar){
			btBuscaContatoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btPrincipalRefresh){
			btPrincipalRefresh.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.black));
		}else if(event.getSource() == btAddEventoAddContato){
			btAddEventoAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddEventoAddFoto){
			btAddEventoAddFoto.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == lbFoto){
			lbFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.black));
		}else if(event.getSource() == lbEditarPerfilFoto){
			lbEditarPerfilFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.black));
		}else if(event.getSource() == btAudioStop){
			btAudioStop.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAudioPlay){
			btAudioPlay.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddEventoAddAudio){
			btAddEventoAddAudio.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddEventoAudioAtualizar){
			btAddEventoAudioAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAddEventoAudioCadastrar){
			btAddEventoAudioCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btLoginEsqueciSenha){
			btLoginEsqueciSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btRecuperarSenha){
			btRecuperarSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAnotacaoAddNote){
			btAnotacaoAddNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAnotacaoInserirNotaOK){
			btAnotacaoInserirNotaOK.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAnotacaoInserirNotaCancelar){
			btAnotacaoInserirNotaCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAnotacaoVisualizar){
			btAnotacaoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}else if(event.getSource() == btAnotacaoRemoverNote){
			btAnotacaoRemoverNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.black));
		}
	}

	/*
	 * Efeito quando o botao e clicado uma vez
	 */
	@Override
	public void mouseReleased(MouseEvent event) {
		if(event.getSource() == btCadastroCadastrar){
			btCadastroCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btCadastroCancelar){
			btCadastroCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btLoginCadastrar){
			btLoginCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btLoginCancelar){
			btLoginCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btLoginEntrar){
			btLoginEntrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalAddContato){
			btPrincipalAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalAddEvento){
			btPrincipalAddEvento.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalLogout){
			btPrincipalLogout.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAddContatoCadastrar){
			btAddContatoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAddContatoCancelar){
			btAddContatoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalEditarPefil){
			btPrincipalEditarPefil.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.DARK_GRAY));
		}else if(event.getSource() == btAddEventoCadastrar){
			btAddEventoCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAddEventoCancelar){
			btAddEventoCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btEditarPerfilAtualizar){
			btEditarPerfilAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btEditarPerfilCancelar){
			btEditarPerfilCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaContatoRemove){
			btBuscaContatoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalBuscaContato){
			btPrincipalBuscaContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalBuscaEventoPorNome){
			btPrincipalBuscaEventoPorNome.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaEventoRemove){
			btBuscaEventoRemove.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaContatoSelecionar){
			btBuscaContatoSelecionar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaContatoEditar){
			btBuscaContatoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaEventoEditar){
			btBuscaEventoEditar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAddEventoAtualiza){
			btAddEventoAtualiza.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAddContatoAtualizar){
			btAddContatoAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaFormaDeContatoRemover){
			btBuscaFormaDeContatoRemover.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btRemoverFormaDeContato){
			btRemoverFormaDeContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btBuscaContatoVisualizar){
			btBuscaContatoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btPrincipalRefresh){
			btPrincipalRefresh.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 3, Color.DARK_GRAY));
		}else if(event.getSource() == btAddEventoAddContato){
			btAddEventoAddContato.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAddEventoAddFoto){
			btAddEventoAddFoto.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == lbFoto){
			lbFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.blue));
		}else if(event.getSource() == lbEditarPerfilFoto){
			lbEditarPerfilFoto.setBorder(BorderFactory.createMatteBorder(1,1,5,1,Color.blue));
		}else if(event.getSource() == btAudioStop){
			btAudioStop.setBorder(BorderFactory.createMatteBorder(0, 0,  3, 0, Color.blue));
		}else if(event.getSource() == btAudioPlay){
			btAudioPlay.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAddEventoAddAudio){
			btAddEventoAddAudio.setBorder(BorderFactory.createMatteBorder(0, 0,  3, 0, Color.blue));
		}else if(event.getSource() == btAddEventoAudioAtualizar){
			btAddEventoAudioAtualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAddEventoAudioCadastrar){
			btAddEventoAudioCadastrar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btLoginEsqueciSenha){
			btLoginEsqueciSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btRecuperarSenha){
			btRecuperarSenha.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.DARK_GRAY));
		}else if(event.getSource() == btAnotacaoAddNote){
			btAnotacaoAddNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAnotacaoInserirNotaOK){
			btAnotacaoInserirNotaOK.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAnotacaoInserirNotaCancelar){
			btAnotacaoInserirNotaCancelar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAnotacaoVisualizar){
			btAnotacaoVisualizar.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}else if(event.getSource() == btAnotacaoRemoverNote){
			btAnotacaoRemoverNote.setBorder(BorderFactory.createMatteBorder(0, 0, 3, 0, Color.blue));
		}
	}
}